我是C#和WPF的新手,请给予我一些建议:
我有一个WPF应用程序用来显示一些堆栈面板,所有堆栈面板默认可见性设置为折叠,他们将根据接收到的数据切换到可见。
现在我想把所有这些堆栈面板变成资源,这样我就可以在一些新添加的选项卡控件和堆栈面板中重用它。
<StackPanel x:Name="ColorOption" Visibility="Collapsed">
<TextBlock Text="Line Color" Style="{StaticResource ItemNameTextBlockStyle}"/>
<Button Style="{StaticResource ColorButtonStyle}" Click="Color_Click">
<Button.Content>
<Rectangle x:Name="LineColorRect" Style="{StaticResource ColorSelectionRectangleStyle}" />
</Button.Content>
</Button>
</StackPanel>
上面是我正在使用的一个堆栈面板的例子。在后面的代码中,函数“Color_Click”将改变这个“ColorOption”堆栈面板的状态并做一些事情。
然而,在我尝试将此堆栈面板放入Windows之后。资源
<Window.Resources>
<StackPanel x:Name="ColorOption" Visibility="Collapsed" x:Key="ColorOption">
<TextBlock Text="Line Color" Style="{StaticResource ItemNameTextBlockStyle}"/>
<Button Style="{StaticResource ColorButtonStyle}" Click="Color_Click">
<Button.Content>
<Rectangle x:Name="LineColorRect" Style="{StaticResource ColorSelectionRectangleStyle}" />
</Button.Content>
</Button>
</StackPanel>
</Window.Resources> (I also put the style files inside)
在选项卡控件中
<TabControl>
<TabItem Header="Tab 1" Content="{StaticResource ColorOption}"/>
</TabControl>
Visual Studio在代码背后显示错误,指出“ColorOption不存在于当前上下文中”
我该如何解决这个问题?有没有办法设置上下文?谢谢
1条答案
按热度按时间bksxznpy1#
您可以简单地将StackPanel Package 在
ContentControl
中并使其成为ControlTemplate。但是,您需要在
ContentControl
中更改控件的属性,这会很麻烦。因此,StackPanel可以改为 Package 在UserControl
中。这在WPF中是一种常见的方法。缺点是您需要向
UserControl
添加依赖属性,并将它们与内部控件的依赖属性连接起来,以便您可以在UserControl
级别设置它们的值,并将它们与外部控件和窗口连接起来。这可能也很复杂和麻烦。因此,我认为理想情况下,最好是找到一个具有类似功能的现有控件,并从现有控件派生出一个自定义控件。