gpt4 book ai didi

c# - WPF。双态元素

转载 作者:太空宇宙 更新时间:2023-11-03 22:18:08 25 4
gpt4 key购买 nike

我正在实现两个状态元素。我有两个 xaml(用于第一状态和第二状态)。我应该在单击鼠标时更改状态。

我创建自己的 Control child 并使用 xaml

 <Style TargetType="l:ActionButton">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="l:ActionButton">
<ContentControl x:Name="LayoutRoot">
<ContentControl.Resources>
<ControlTemplate x:Key="buttonDownTemplate">
<Canvas>.....</Canvas>
</ControlTemplate>
<ControlTemplate x:Key="buttonUpTemplate">
<Canvas>.....<Canvas>
</ControlTemplate>
</ContentControl.Resources>
</ContentControl>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

在 OnApplyTemplate 我处理模板更改

    public override void OnApplyTemplate()
{
base.OnApplyTemplate();
var btn = GetTemplateChild("LayoutRoot") as ContentControl;
if (btn != null)
{
btn.MouseLeftButtonDown += (o, e) =>
{
//sample change template
var template = (ControlTemplate)btn.FindResource("buttonDownTemplate");
this.Template = template;
};

}

}

但是当我用我的控件运行应用程序时,我得到:“已经添加了具有相同键的项目。”异常?

怎么了。我的方法对吗?

谢谢安德鲁

最佳答案

这绝对不是要走的路。如果您想要一个具有两个独立状态的控件,您应该重新设置 ToggleButton 的样式。您不想完全换掉 ControlTemplate,因为这真的很慢。相反,您可以将两个视觉对象放在同一个模板中,并根据状态显示/隐藏它们。

这就是 ToggleButton 的样式,它可以完成您所追求的(并且它不需要隐藏代码):

<Style x:Key="twoStateButton" TargetType="{x:Type ToggleButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<Grid>
<Canvas x:Name="buttonDownTemplate" Background="#202020" Visibility="Collapsed">
...
</Canvas>
<Canvas x:Name="buttonUpTemplate" Background="#C0C0C0">
...
</Canvas>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="buttonDownTemplate" Property="Visibility" Value="Visible" />
<Setter TargetName="buttonUpTemplate" Property="Visibility" Value="Collapsed" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

关于c# - WPF。双态元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4260615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com