问题描述
在我的自定义控件中,我的控件模板中有两个彼此相邻的 Toggle 按钮,当按下一个或另一个 ToggleButton 时,我试图为整个自定义控件的背景设置一种颜色。
这是我的理解代码:
<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 访问它,并且取决于它是真还是假,我可以将背景设置为红色?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)