2013-10-01 51 views
0

我遇到了将XAML转换为代码隐藏的麻烦。XAML代码隐藏

我有这样的:

<DataGrid.RowStyle> 
    <Style TargetType="DataGridRow"> 
     <Style.Triggers> 
     <DataTrigger Binding="{Binding state}" Value="True"> 
      <Setter Property="Background" Value="GreenYellow"/>             
     </DataTrigger> 
     <DataTrigger Binding="{Binding state}" Value="False"> 
      <Setter Property="Background" Value="Red"/> 
     </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</DataGrid.RowStyle> 

DataGrid通过(伪)填充... new Dataview(ds.Tables[mytable]);

现在我试图创建在后面 的代码风格和触发,但我有麻烦与绑定。

BrushConverter brushConverter = new BrushConverter(); 
      Style setcolor = new Style(); 
      setcolor.TargetType = typeof(DataGridRow); 
      DataTrigger setgreen = new DataTrigger(); 
      setgreen.Binding = new Binding("state"); 
      setgreen.Value = true; 
      setgreen.Setters.Add(new Setter(DataGrid.RowBackgroundProperty, brushConverter.ConvertFromString(Colors.GreenYellow.ToString()))); 
      setcolor.Triggers.Add(setgreen); 

-Alas它不工作

+0

您没有设置'setgreen.Binding'。为什么刷转换器?你可以只写'Brushes.GreenYellow'。 – Clemens

+0

不知道刷子 - 虐待做到这一点。谢谢。 - 似乎我把这部分留下了,编辑了这个问题。 – VisualBean

+1

我想你想设置'DataGridRow.BackgroundProperty'而不是'DataGrid.RowBackgroundProperty'。 – Clemens

回答

1

您需要的二传手的Property值从

DataGrid.RowBackgroundProperty 

改变

DataGridRow.BackgroundProperty 

或equiva借给

Control.BackgroundProperty. 
0

我会建议建立Style本身XAML,然后把它拿来在你的代码隐藏当您需要它。例如,如果一切都发生在UserControl

<UserControl x:Class=... 
      ... 
> 
    <UserControl.Resources> 
     <Style x:Key="MyRowStyle" TargetType="DataGridRow"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding state}" Value="True"> 
        <Setter Property="Background" Value="GreenYellow"/>             
       </DataTrigger> 
       <DataTrigger Binding="{Binding state}" Value="False"> 
        <Setter Property="Background" Value="Red"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </UserControl.Resources> 

    <!-- Your content here.. --> 

..和你的后台代码:

var newGrid = new Dataview(ds.Tables[mytable]); 
newGrid.RowStyle = this.Resources["MyRowStyle"] as Style;