在窗口设计器中,我将创建一组具有ToggleButton特性的RadioButton,如下所示:
<StackPanel x:Name="ToolPanel" Orientation="Horizontal" Grid.Row="0">
<StackPanel.Resources>
<Style TargetType="RadioButton" BasedOn="{StaticResource {x:Type ToggleButton}}"/>
</StackPanel.Resources>
<RadioButton x:Name="button_DrawNode" Click="Button_DrawNode_Checked" Content="Draw"/>
<RadioButton x:Name="button_Connect" Click="Button_Connect_Checked" Content="Connect"/>
<RadioButton x:Name="button_Move" Click="Button_Move_Checked" Content="Move"/>
<RadioButton x:Name="button_Remove" Click="Button_Remove_Checked" Content="Remove"/>
</StackPanel>
在后面的代码中,我将创建一个StackPanel,然后像这样创建后续的RadioButton:
StackPanel stackPanel = new StackPanel
{
Orientation = Orientation.Horizontal
};
Grid.SetRow(stackPanel, 0);
RadioButton button_DrawNode = new RadioButton { Content = "Draw" };
RadioButton button_Connect = new RadioButton { Content = "Connect" };
RadioButton button_Move = new RadioButton { Content = "Move" };
RadioButton button_Remove = new RadioButton { Content = "Remove" };
stackPanel.Children.Add(button_DrawNode);
stackPanel.Children.Add(button_Connect);
stackPanel.Children.Add(button_Move);
stackPanel.Children.Add(button_Remove);
但是,在网上搜索,我找不到一个后面实现以下标签代码的例子:
<StackPanel.Resources>
<Style TargetType="RadioButton" BasedOn="{StaticResource {x:Type ToggleButton}}"/>
</StackPanel.Resources>
据我所知,在StackPanel.Resources标签中放置一个Style标签(如上面的一个),将使StackPanel中的所有RadioButton都具有ToggleButton的特性,只需要设置一次即可。
在下面的代码中,我可以为每个RadioButton示例设置Style属性,使它们表现得像ToggleButton一样,但我觉得这样做是不必要的重复代码。
Style toggleRadioButtonStyle = new Style(typeof(RadioButton), (Style)FindResource(typeof(ToggleButton)));
RadioButton button_DrawNode = new RadioButton { Content = "Draw", Style = toggleRadioButtonStyle };
RadioButton button_Connect = new RadioButton { Content = "Connect", Style = toggleRadioButtonStyle };
RadioButton button_Move = new RadioButton { Content = "Move", Style = toggleRadioButtonStyle };
RadioButton button_Remove = new RadioButton { Content = "Remove", Style = toggleRadioButtonStyle };
我尝试了以下方法,认为StackPanel的Style属性设置了StackPanel.resources标记。
StackPanel stackPanel = new StackPanel
{
Orientation = Orientation.Horizontal,
Style = new Style(typeof(RadioButton), (Style)FindResource(typeof(ToggleButton)))
};
结果:
System.InvalidOperationException:'RadioButton ' TargetType与元素' StackPanel '的类型不匹配。'
我的结论是StackPanel的Style属性只是用来设置它自己的样式。
我还查看了StackPanel的Resources属性,但InteliSense说它只需要一个ResourceDictionary。
任何帮助或见解将不胜感激。
1条答案
按热度按时间chhqkbe11#
我认为这个问题的标题令人困惑,除非确实有必要,否则通常不建议在代码背后构建视觉元素。
也就是说,你的错误是显而易见的。您需要将RadioButton的样式设置为StackPanel的资源,就像您在xaml中所做的那样,但不是StackPanel的样式。要做到这一点,Cyrillus杜克对WPF Adding style resource without key in code behind的回答是有用的。