wpf - 根据网格的列宽更改矩形填充

标签 wpf styles datatrigger

基本上我想按照标题说的那样做,如果列宽是 0.50,那么矩形应该是红色的,如果是 0.75,那么它应该是琥珀色,如果是 1,那么它应该是绿色。

我以为我可以用 DataTriggers 实现这一点,但由于某种原因,我收到“对象引用未设置为对象的实例”错误,这是我的代码,我在这里遗漏了什么吗?

仅供引用,宽度属性将通过 timer_tick 事件在后端更改。

<Grid x:Name="Grid1" Width="300" Height="30">
    <Grid.ColumnDefinitions>
        <ColumnDefinition x:Name="MyColumn1" Width=".50*"></ColumnDefinition>
        <ColumnDefinition x:Name="MyColumn2" Width=".50*"></ColumnDefinition>
    </Grid.ColumnDefinitions>
    <Grid.Triggers>
        <DataTrigger Binding="{Binding ElementName=MyColumn1,Path=Width}" Value=".50*">
            <Setter TargetName="rect" Property="Fill" Value="Red"></Setter>
        </DataTrigger>
        <DataTrigger Binding="{Binding ElementName=MyColumn1,Path=Width}" Value=".75*">
            <Setter TargetName="rect" Property="Fill" Value="Yellow"></Setter>
        </DataTrigger>
        <DataTrigger Binding="{Binding ElementName=MyColumn1,Path=Width}" Value="1">
            <Setter TargetName="rect" Property="Fill" Value="Green"></Setter>
        </DataTrigger>
    </Grid.Triggers>
    <Rectangle x:Name="rect" Grid.Column="0" HorizontalAlignment="Stretch"></Rectangle>
    <Rectangle Grid.Column="1" Fill="Blue"></Rectangle>

</Grid>

最佳答案

这对我有用。请注意我使用了 StyleRectangle 上设置触发器.

<Grid x:Name="Grid1" Width="300" Height="30">
    <Grid.ColumnDefinitions>
        <ColumnDefinition x:Name="MyColumn1" Width=".50*"></ColumnDefinition>
        <ColumnDefinition x:Name="MyColumn2" Width=".50*"></ColumnDefinition>
    </Grid.ColumnDefinitions>

    <Rectangle x:Name="rect" Grid.Column="0" HorizontalAlignment="Stretch">
            <Rectangle.Style>
                <Style TargetType="{x:Type Rectangle}">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ElementName=MyColumn1,Path=Width}" Value=".50*">
                            <Setter Property="Fill" Value="Red"></Setter>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding ElementName=MyColumn1,Path=Width}" Value=".75*">
                            <Setter Property="Fill" Value="Yellow"></Setter>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding ElementName=MyColumn1,Path=Width}" Value="1">
                            <Setter Property="Fill" Value="Green"></Setter>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Rectangle.Style>
    </Rectangle>
    <Rectangle Grid.Column="1" Fill="Blue"></Rectangle>
</Grid>

关于wpf - 根据网格的列宽更改矩形填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2772436/

相关文章:

wpf - Textblock.TextTrimming 在网格内不起作用

.net - 通过 Converter 或 ExtensionMethod 读取属性属性

html - 如何在显示 : none? 后使用类来显示特定元素

sqlite - 我可以在sqlite的触发器中创建变量吗?

c# - WPF:如何使用数据触发器(或等效项)交换 Listview 单元格内容

WPF DataGrid 与 Windows 窗体 DataGridView

c# - 为什么要使用MVVM? [复制]

html - 绝对位置在固定位置内不起作用

css - CSS 中的后备字体粗细

c# - 如何在 DataTrigger 中使用预定义样式