【问题标题】:Change the background of a grid in run time在运行时更改网格的背景
【发布时间】:2015-10-05 09:46:12
【问题描述】:

我的网格设置为浅灰色背景,我想知道当鼠标悬停在特定网格上时如何更改网格的背景。如果我将目标类型从边框更改为网格,目前我的屏幕会完全变黑:

我得到了什么

我想要的只是所有的浅灰色都变成黄色

XAML

<DataTemplate x:Key="PropertyNodeTemplate">
        <Grid VerticalAlignment="Top" HorizontalAlignment="Center" Background="LightGray">
            <Grid.RowDefinitions>
                <RowDefinition Height="50"/>
                <RowDefinition Height="50"/>
                <RowDefinition Height="50"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <Border VerticalAlignment="Center" Grid.Row="0">
                <Border.Style>
                    <Style TargetType="Border">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding IsHighlighted}" Value="True">
                                <Setter Property="Background" Value="Yellow"></Setter>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Border.Style>
                <Label Name="PropertyTitle" Content="Property Shnarf" VerticalAlignment="Top" HorizontalAlignment="Center">
                </Label>
            </Border>
            <Button Name="AddScenario" Click="AddScenarioButton_OnClick" Grid.Row="3" BorderThickness="0">
                <Button.Style>
                    <Style TargetType="Button">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="Button">
                                    <Border BorderThickness="0">
                                        <ContentPresenter/>
                                    </Border>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding IsHighlighted}" Value="True">
                                <Setter Property="Visibility" Value="Visible"></Setter>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding IsHighlighted}" Value="False">
                                <Setter Property="Visibility" Value="Hidden"></Setter>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Button.Style>
                <Border BorderThickness="1,1,1,1" VerticalAlignment="Center" Background="LightGray">
                    <Border.BorderBrush>
                        <DrawingBrush Viewport="8,8,8,8" ViewportUnits="Absolute" TileMode="Tile">
                            <DrawingBrush.Drawing>
                                <DrawingGroup>
                                    <GeometryDrawing Brush="LightGray">
                                        <GeometryDrawing.Geometry>
                                            <GeometryGroup>
                                                <RectangleGeometry Rect="0,0,50,50" />
                                                <RectangleGeometry Rect="50,50,50,50" />
                                            </GeometryGroup>
                                        </GeometryDrawing.Geometry>
                                    </GeometryDrawing>
                                </DrawingGroup>
                            </DrawingBrush.Drawing>
                        </DrawingBrush>
                    </Border.BorderBrush>
                    <StackPanel Margin="2" Width="120" Orientation="Horizontal" Tag="{Binding RelativeSource={RelativeSource AncestorType={x:Type syncfusion:Node}}}">
                        <Image Source="{StaticResource ImageBkgPlus}" Width="16" Height="16" Margin="5"/>
                        <Label Width="70" FontSize="10" VerticalAlignment="Center" Content="Add Scenario">
                        </Label>
                    </StackPanel>
                </Border>
            </Button>
        </Grid>
    </DataTemplate>

【问题讨论】:

    标签: wpf background grid


    【解决方案1】:

    您的Border 仅位于网格的第 0 行,因此这是唯一响应您的DataTrigger 的部分。为什么不使用Grid.Style 而不是Border.Style

    <DataTemplate x:Key="PropertyNodeTemplate">
        <Grid VerticalAlignment="Top" HorizontalAlignment="Center">
            <Grid.RowDefinitions>
                <RowDefinition Height="50"/>
                <RowDefinition Height="50"/>
                <RowDefinition Height="50"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
    
            <Grid.Style>
              <Style TargetType="Grid">
                <Setter 
                   Property="BackGround"
                   Value="LightGray" />
                <Style.Triggers>
                  <DataTrigger 
                    Binding="{Binding IsHighlighted}" 
                    value="True">
                    <Setter 
                       Property="Background" 
                       Value="Yellow" />
                  </DataTrigger>
                </Style.Triggers>
              </Style>
            </Border.Style>
          ...
        </Grid>
    </DataTemplate>
    

    您可以使用 IsMouseover,而不是 DataTrigger,这取决于您想要什么:WPF Grid IsMouseOver Property

    【讨论】:

    • 好的,非常感谢,我会试一试告诉你
    • 仍然只是得到上面的黑屏,即使使用 IsMouseOver 而不是 datatrigger :(
    • 我弄错了,留下了 TargetType ="Border"。它应该是 TartgetType="Grid"。我认为它可能已经击中了您的WindowBorder。我认为您可能还需要将 LightGray 放入样式中,因为使用本地/样式设置器的优先级。我也会为此进行编辑...
    • 抱歉,我现在无法检查代码,但我认为除非拼写错误,否则应该可以。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 2019-03-07
    • 1970-01-01
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多