我想創建一個自定義控制元件,它的作用類似于ToolBar控制元件,但除了用戶提供的元素之外,還包含預構建的元素。
例如,使用下面的代碼,我需要一個包含預定義元素的工具列,然后是兩個用戶提供的按鈕:
<MyToolBar>
<Button>User button 1</Button>
<Button>User button 2</Button>
</MyToolBar>
這將相當于:
<ToolBar>
<Button>Predefined button 1</Button>
<Button>Predefined button 2</Button>
<Button>User button 1</Button>
<Button>User button 2</Button>
</ToolBar>
我試過繼承ToolBar類并指定一個CompositeCollectionas ToolBar.ItemSource,但是它失敗了,拋出
找不到目標元素的管理 FrameworkElement 或 FrameworkContentElement
<!-- Wrong Code -->
<Style TargetType="{x:Type local:MyToolBar}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:MyToolBar}">
<ToolBar>
<ToolBar.ItemsSource>
<CompositeCollection>
<CollectionContainer Collection="{Binding ItemsSource,RelativeSource={RelativeSource TemplatedParent}}" />
<Button>Predefined button 1</Button>
<Button>Predefined button 2</Button>
</CompositeCollection>
</ToolBar.ItemsSource>
</ToolBar>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
uj5u.com熱心網友回復:
定義一個只讀的
uj5u.com熱心網友回復:
基于這個問題,當源內容更改時,系結似乎CollectionContainer.Collection不會更新容器內容。
您必須使用CollectionViewSource具有代理:
<Style x:Key="MyToolBarStyle" TargetType="{x:Type ToolBar}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToolBar}">
<ToolBar>
<ToolBar.Resources>
<CollectionViewSource x:Key="TemplateItems" Source="{TemplateBinding ItemsSource}" />
</ToolBar.Resources>
<ToolBar.ItemsSource>
<CompositeCollection>
<Button>Predefined button 1</Button>
<Button>Predefined button 2</Button>
<CollectionContainer Collection="{Binding Source={StaticResource TemplateItems}}" />
</CompositeCollection>
</ToolBar.ItemsSource>
</ToolBar>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/426000.html
標籤:wpf
上一篇:如何為WPF雙文本框正確設定CanExecuteCommand?
下一篇:那么將網格行/列設定為默認填充?
