我是 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.Resources 之后
<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”
我怎樣才能解決這個問題?有什么方法可以設定背景關系嗎?謝謝你
uj5u.com熱心網友回復:
您可以簡單地將 StackPanel 包裝進去ContentControl并使其成為 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并將它們與外部控制元件和視窗橋接。這也可能是復雜和麻煩的。
因此,我認為理想情況下,最好找到一個具有您想要的類似功能的現有控制元件并創建一個從現有控制元件派生的自定義控制元件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/532979.html
標籤:wpf
