【问题标题】:XAML to codebehindXAML 到代码隐藏
【发布时间】:2013-10-02 03:04:44
【问题描述】:

我在将 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);

-唉,它不工作

【问题讨论】:

  • 你还没有设置setgreen.Binding。为什么刷转换器?你可以写Brushes.GreenYellow。
  • 不知道刷子 - 不如那样做。谢谢。 - 似乎我遗漏了那部分,编辑了问题。
  • 我猜你想设置DataGridRow.BackgroundProperty而不是DataGrid.RowBackgroundProperty。
  • 成功了! - 这是一个奇迹:)

标签: wpf xaml styles code-behind datatrigger


【解决方案1】:

您需要将 Setter 的 Property 值从

DataGrid.RowBackgroundProperty

到

DataGridRow.BackgroundProperty

或同等的

Control.BackgroundProperty.

【讨论】:

    【解决方案2】:

    我建议在 XAML 中构建 Style 本身,然后在需要时在代码隐藏中获取它。例如,如果一切都发生在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;
    

    【讨论】:

      猜你喜欢
      • 2010-11-03
      • 1970-01-01
      • 2011-04-21
      • 2016-01-20
      • 1970-01-01
      • 1970-01-01
      • 2012-07-15
      • 2021-03-08
      • 2015-03-25
      相关资源
      最近更新 更多