【发布时间】:2020-12-31 00:58:24
【问题描述】:
在我的自定义控件中,我的控件模板中有两个彼此相邻的切换按钮,当一个或另一个切换按钮被按下时,我试图为整个自定义控件的背景设置一种颜色。
这是我的理解代码:
<local:SplitButtonModel.Template>
<ControlTemplate TargetType="{x:Type local:SplitButtonModel">
<ControlTemplate.Resources>
<Style TargetType="{x:Type ToggleButton">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<Rectangle x:Name="rect" Fill="Transparent" Stroke="#00000000"/>
<ContentPresenter SnapToDevicePixels="{TemplatedBinding SnapToDevicePixels}"
HorizontalAlignment="{TemplatedBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplatedBinding VerticalContentAlignment}"
RecognizeAccessKey="True"/>
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Fill" TargetName="rect" Value="Red"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ControlTemplate.Resources>
<Border x:Name="border" Background="{TemplatedBinding Background}"
BorderBrush="{TemplatedBinding BorderBrush}"
BorderThickness="{TemplatedBinding BorderThickness}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto" MinWidth="15"/>
</Grid.ColumnDefinitions>
<ToggleButton Grid.Column="0"/>
<ToggleButton Grid.Column="1"/>
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" TargetName="border" Value="Red"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</local:SplitButtonModel.Template>
所以在我将背景设置为红色的模板中,它不起作用,因为 IsPressed 绑定到 ToggleButton 并且它永远不会在主模板中被调用。现在,如果我在 IsPressed 上将 Rectangle“rect”Fill 属性设置为红色,这将正常工作,但它只会使 ToggleButton 被按下红色,而我希望两个 ToggleButton 都被触发,即使另一个没有被按下。
我正在考虑创建一个静态类,如下所示:
public static class GlobalHelper
{
public static bool ButtonPressed = false;
}
然后我将触发器设置如下:
<Trigger Property="IsPressed" Value="True">
<Setter Property="{Binding Source="{x:Static local:GlobalHelper.ButtonPressed}}" Value="True"/>
</Trigger>
但这不起作用,那么有什么方法可以修改静态值,然后在主模板中我可以使用 DataTrigger 访问它,并根据它是真还是假,我可以将背景设置为红色?
【问题讨论】:
标签: c# wpf xaml data-binding custom-controls