WPF如何将stackpanel设置为资源并在TabControls中重用它



我是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在当前上下文中不存在&;

我该如何解决这个问题?有办法设置上下文吗?谢谢你

你可以简单地在ContentControl中包装StackPanel并使其成为ControlTemplate。

<ControlTemplate x:Key="ColorOptionTemplate" TargetType="{x:Type ContentControl}">
    <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>
</ControlTemplate>

但是,您需要更改ContentControl内部控件的属性,这将是麻烦的。所以StackPanel可以用UserControl来代替。

<UserControl x:Class="WpfApp1.ColorOptionControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <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>
</UserControl>

这是WPF中常见的方式。缺点是您需要将依赖属性添加到UserControl,并将它们与内部控件的依赖属性连接起来,以便您可以在UserControl级别设置它们的值,并将它们与外部控件和窗口连接起来。这也可能是复杂和繁琐的。

所以我认为理想情况下最好找到一个现有的控件,它有你想要的类似功能,并创建一个自定义控件派生自现有的。

相关内容

  • 没有找到相关文章

最新更新