选择时VisualBrush颜色不会改变

时间:2014-10-13 05:32:18

标签: wpf

我在WPF中创建了一个VisualBrush,为我提供了一个字符的波浪下划线。

<VisualBrush x:Key="WavyBrush">
    <VisualBrush.Visual>
        <Path Data="M 0,2 L 2,0 4,2 6,0 8,2 10,0 12,2" Stroke="Black" />
    </VisualBrush.Visual>
</VisualBrush>

除非我将结果放在DataGrid中并选择行,否则它的效果很好。如果未选中的行具有带有白色背景的黑色文本并且选择该行将文本变为白色(和背景蓝色或其他颜色),则我的VisualBrush与Stroke =&#34; Black&#34;保持黑色,不会变白,看起来很混乱。

有没有办法让画笔像文字的颜色一样?

2 个答案:

答案 0 :(得分:0)

选择行时,可以使用DataTrigger更改画笔的颜色。该代码使用ListBox,但您可以轻松地对其进行调整以使用DataGrid

<Window.Resources>
    <VisualBrush x:Key="WavyBrush">
        <VisualBrush.Visual>
            <Path Data="M 0,2 L 2,0 4,2 6,0 8,2 10,0 12,2" Stroke="Black" />
        </VisualBrush.Visual>
    </VisualBrush>
    <VisualBrush x:Key="whiteWavyBrush">
        <VisualBrush.Visual>
            <Path Data="M 0,2 L 2,0 4,2 6,0 8,2 10,0 12,2" Stroke="White" />
        </VisualBrush.Visual>
    </VisualBrush>
</Window.Resources>
<Grid>
    <ListBox ItemsSource="{Binding}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid Height="50" Width="350">
                    <Border x:Name="border" Width="350" Height="10" VerticalAlignment="Bottom" Background="{StaticResource WavyBrush}">
                    </Border>
                </Grid>
                <DataTemplate.Triggers>
                    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsSelected}" Value="True">
                        <Setter TargetName="border" Property="Background" Value="{StaticResource whiteWavyBrush}" />
                    </DataTrigger>
                </DataTemplate.Triggers>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>

答案 1 :(得分:0)

如果有其他人感兴趣,DrawingBrush就像文字一样,并在选中时改变颜色。

    <DrawingBrush x:Key="TextBoxWavyBrush">
        <DrawingBrush.Drawing>
            <DrawingGroup>
                <DrawingGroup.Children>
                    <GeometryDrawing Geometry="M 0,2 L 2,0 4,2 6,0 8,2 10,0 12,2">
                        <GeometryDrawing.Pen>
                            <Pen Thickness="1" StartLineCap="Round" EndLineCap="Round" LineJoin="Round" Brush="{Binding RelativeSource={RelativeSource AncestorType=TextBox, Mode=FindAncestor}, Path=Foreground}"/>
                        </GeometryDrawing.Pen>
                    </GeometryDrawing>
                </DrawingGroup.Children>
            </DrawingGroup>
        </DrawingBrush.Drawing>
    </DrawingBrush>