gpt4 book ai didi

c# - 样式仅适用于两个元素

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

我有一个 ToogleButton,我正在用 DataTriggers 改变它的内容:

   <Style x:Key="EstiloToggleButton" TargetType="ToggleButton" BasedOn="{StaticResource {x:Type ToggleButton}}">
<Setter Property="BorderBrush" Value="#FF333333" />
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsChecked}" Value="True">
<Setter Property="BorderBrush" Value="#FFFF8000" />
<Setter Property="Content">
<Setter.Value>
<TextBlock Text="p" FontFamily="Wingdings 3" RenderTransformOrigin="0.5,0.5">
<TextBlock.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleY="0.5"/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform/>
</TransformGroup>
</TextBlock.RenderTransform>
</TextBlock>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsChecked}" Value="False">
<Setter Property="Content">
<Setter.Value>
<TextBlock Text="q" FontFamily="Wingdings 3" RenderTransformOrigin="0.5,0.5">
<TextBlock.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleY="0.5"/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform/>
</TransformGroup>
</TextBlock.RenderTransform>
</TextBlock>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>

它是这样的:

enter image description here

enter image description here

之前我已经为每个按钮定义了这个并且一切都很好,但是它有很多代码行,所以我决定将它压缩成一种样式,然后将相同的样式应用到我所有想要的 ToggleButtons看。

到目前为止一切顺利,但现在我遇到了一个问题:只有一个或有时两个 ToggleButton 同时正常工作,其余的都是空白:

enter image description here

按钮以某种方式相互干扰。这可能是因为样式吗?

我后面有一些丑陋的代码,因为我需要以一种特殊的方式在按钮下方显示一个弹出窗口(在 XAML 中不容易实现)

        //Popup FFT
private void visButtonFFT_Checked(object sender, RoutedEventArgs e)
{
popupFFT.IsOpen = true;
}

private void visButtonFFT_Unchecked(object sender, RoutedEventArgs e)
{
popupFFT.IsOpen = false;
}

private void popupFFT_Closed(object sender, EventArgs e)
{
visButtonFFT.IsChecked = false;
}

我有每个 ToggleButton 的代码(不聪明,我知道,但我还在学习)

您是否看到可以导致这种奇怪行为的因素?谢谢。

编辑:当我将样式从特定的 ToggleButton 移动到 UserControl 的资源时,我唯一改变的是 DataTrigger 的绑定(bind):它以按钮的实际名称为目标,我不得不改变它到 RelativeSource。

最佳答案

因为 Style 是一个 StaticResource,我相信只会创建 Style 内容的一个实例,然后将其传递呈现给触发 Setter 的任何控件。

您应该能够使用“x:Shared”属性创建样式的新实例,而不是跨控件共享同一个实例。

因此,将“x:Shared=False”添加到您的第一行:

<Style x:Key="EstiloToggleButton" TargetType="{x:Type ToggleButton}" BasedOn="{StaticResource {x:Type ToggleButton}}" x:Shared ="False" >
<!-- Your code -->

应该可以解决问题。

来自 MSDN : x:共享属性

When set to false, modifies WPF resource-retrieval behavior so that requests for the attributed resource create a new instance for each request instead of sharing the same instance for all requests.

编辑:忘记提及,这取决于您的 Style 位于 ResourceDictionary 中(它应该基于您所说的放置样式的位置)。

关于c# - 样式仅适用于两个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18688896/

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