WPF ToggleButton模板BorderBrush

时间:2017-01-06 22:37:10

标签: c# wpf togglebutton

**编辑 - 我标记了DynamicResource答案作为答案。这解决了我在这里描述的问题。我在我的主应用程序中仍然遇到问题,事实证明这是因为我在其他地方使用刷子作为StaticResource,然后在我的边框上使用它作为DynamicResource。当我将所有内容切换到DynamicResource时,它正常工作。谢谢!

我似乎无法让BorderBrush在模板化的ToggleButton中工作。这是我的示例.xaml,如果你运行它,当你鼠标悬停或检查其中一个按钮时,你会看到边框变得透明。

    SELECT * FROM users u INNER JOIN profile p ON p.id=u.id WHERE
    FIND_IN_SET(  '7', secondary_groups ) OR primary_group = 7
    GROUP BY u.id;

2 个答案:

答案 0 :(得分:1)

使用矩形似乎有效。 看看这个:DynamicResource color doesn't work for BorderBrush on a Border - Bug?。对我来说这不应该有用。

<Style TargetType="{x:Type ToggleButton}">
        <Setter Property="Background" Value="White" />
        <Setter Property="Foreground" Value="Black" />
        <Setter Property="BorderBrush" Value="{DynamicResource MouseOverBackgroundBrush}"/>
        <Setter Property="Width" Value="Auto"/>
        <Setter Property="Height" Value="40"/>
        <Setter Property="FontSize" Value="13"/>
        <Setter Property="MinWidth" Value="80"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ToggleButton}">
                    <Grid>
                        <Rectangle Fill="{TemplateBinding Background}"
                                   Stroke="{TemplateBinding BorderBrush}"
                                   StrokeThickness="{TemplateBinding BorderThickness}" 
                                   Margin="2">
                        </Rectangle>
                        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Margin="2"/>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="BorderBrush" Value="{StaticResource CheckedBackgroundBrush}" />
                <Setter Property="Background" Value="{StaticResource MouseOverBackgroundBrush}" />
                <Setter Property="Foreground" Value="#333333" />
            </Trigger>
            <Trigger Property="IsChecked" Value="True">
                <Setter Property="BorderBrush" Value="{StaticResource MouseOverBackgroundBrush}"/>
                <Setter Property="Background" Value="{StaticResource CheckedBackgroundBrush}" />
                <Setter Property="Foreground" Value="#ffffff"/>
            </Trigger>
        </Style.Triggers>
    </Style>

答案 1 :(得分:0)

由于使用动态资源标记扩展程序设置画笔的颜色属性,您还应使用动态资源设置您的设置器中的属性:

<Style.Triggers>
    <Trigger Property="IsMouseOver" Value="True">
        <Setter Property="BorderBrush" Value="{DynamicResource CheckedBackgroundBrush}" />
        <Setter Property="Background" Value="{DynamicResource MouseOverBackgroundBrush}" />
        <Setter Property="Foreground" Value="#333333" />
    </Trigger>
    <Trigger Property="IsChecked" Value="True">
        <Setter Property="BorderBrush" Value="{DynamicResource MouseOverBackgroundBrush}"/>
        <Setter Property="Background" Value="{DynamicResource CheckedBackgroundBrush}" />
        <Setter Property="Foreground" Value="#ffffff"/>
    </Trigger>
</Style.Triggers>

我使用StaticResource一旦在运行时实际查找了动态颜色资源,就不会更新setter的值。