2013-10-01 252 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;