gpt4 book ai didi

WPF - 单选按钮控件模板绑定(bind) "IsChecked"不起作用

转载 作者:行者123 更新时间:2023-12-04 19:03:13 24 4
gpt4 key购买 nike

我有一个像下面这样的控制模板,我想得到 IsChecked用户选择单选按钮时的属性。

但是当用户选择单选按钮“A”时,它是 IsChecked属性仍然显示为假。为什么?

<ControlTemplate x:Key="RadioBtnTemplate" TargetType="{x:Type RadioButton}">
<Grid>
<StackPanel Margin="5">
<RadioButton Name="tempbtn" IsChecked="{TemplateBinding IsChecked}" FontFamily="Segoe UI" FontSize="18.667" Content="{TemplateBinding Content}" GroupName="{TemplateBinding GroupName}"/>
</StackPanel>
</Grid>
</ControlTemplate>

我使用这个模板:
<RadioButton GroupName="CG" x:Name="_rdoBtnA" Content="A" Template="{DynamicResource RadioBtnTemplate}" IsChecked="True"/>
<RadioButton GroupName="CG" x:Name="_rdoBtnB" Content="B" Template="{DynamicResource RadioBtnTemplate}" />
<RadioButton GroupName="CG" x:Name="_rdoBtnC" Content="C" Template="{DynamicResource RadioBtnTemplate}" />

最佳答案

如果我们照原样举您的例子,那么您有两个问题会导致您所看到的问题。

问题1:
首先,您的设计创建了 六个 而不是 三个 <RadioButton> 控件。 <StackPanel> 中的三个,然后是作为控件模板的一部分创建的三个。所有 六个 单选按钮现在都链接为 GroupName="CG" 组的一部分。

如您所知,因为它们都属于同一个 CG 组,所以六个单选按钮中只有一个可以将 IsChecked 属性设置为 True 。三个命名控件 _rdoBtnA_rdoBtnB_rdoBtnC 甚至在屏幕上都不可见,因此它们永远不能设置为 True(在 _rdoBtnA 的情况下,从 False 立即设置为 XAML 声明的模板控件为 0x10457 时刻)。

要解决这种情况,请从控件模板定义中删除 True,只留下组中的三个顶级单选按钮。

问题 2: 这是我认为是问题根源的问题。 GroupName="{TemplateBinding GroupName}" 只是 IsChecked={TemplateBinding IsChecked} 绑定(bind),其他方式不会更新。要使绑定(bind)为 OneWay,您需要使用绑定(bind)定义的长手版本 TwoWay
通过进行这两项更改,控制模板现在变成了这个。

<ControlTemplate x:Key="RadioBtnTemplate" TargetType="{x:Type RadioButton}">
<Grid>
<StackPanel Margin="5">
<RadioButton Name="tempbtn" IsChecked="{Binding IsChecked, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}" FontFamily="Segoe UI" FontSize="18.667" Content="{TemplateBinding Content}" />
</StackPanel>
</Grid>
</ControlTemplate>

关于WPF - 单选按钮控件模板绑定(bind) "IsChecked"不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31781056/

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