如何通过编程设置样式

56

我有以下样式,但我需要用编程方式实现:

<xcdg:DataGridControl MinHeight="300" 
                      Name="listViewUnallocated" 
                      ItemsSource="{Binding Source={StaticResource
                                         cvs_unallocatedTerminals}}"
                      AllowDrop="True" 
                      Drop="Grid_Drop" 
                      MouseMove="Grid_MouseMove" 
                      KeyUp="listViewUnallocated_KeyUp"
                      MouseDoubleClick="gridUnallocated_MouseDoubleClick"
                      ReadOnly="True"
                      DockPanel.Dock="Top">
    <xcdg:DataGridControl.Resources>
        <Style TargetType="{x:Type xcdg:DataRow}" x:Name="selectedStyleTrigger">
            <Style.Triggers>
                <DataTrigger Binding="{Binding TerminalId}" Value="72948028">
                    <Setter Property="Background" Value="Red" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </xcdg:DataGridControl.Resources>
3个回答

66

在控件的代码后台文件中尝试:

this.Style = Resources["ResourceName"] as Style;

6
FindResource("ResourceName")和Resources["ResourceName"]有什么区别? - SepehrM
6
使用 Window 构造函数我无法找到样式,但使用 FindResource 方法我可以找到它。(这是一个抽象类,在多个地方继承且没有定义 XAML。) - ANeves
1
我认为这样做不是一个好主意。如果真的要这样做,那么我至少会在XAML文件中添加注释,如:<!--此资源用于代码后台,请勿更改名称-->。否则,我会完全在代码后台实现它。 - marsh-wiggle

54

在XAML中设置x:Key,在代码后台中使用:

something.Style = (Style) FindResource("YourResourceKey");

21

嗨,我们可以通过编程来设置样式,就像这样。

Style rowStyle = new Style(typeof(DataGridRow));

DataTrigger dataTrigger = new DataTrigger("TerminalId");
Binding binding = new Binding();
dataTrigger.Binding = binding;
dataTrigger.Value = 72948028;

Setter setter = new Setter(DataGridRow.BackgroundProperty, Brushes.Red);

dataTrigger.Setters.Add(setter);

rowStyle.Triggers.Add(dataTrigger);
listViewUnallocated.RowStyle = rowStyle;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接