我有我的自定義控制元件:
選單按鈕控制元件.xaml
<UserControl
(...)
>
<Grid>
<ItemsControl
x:Name="tStack"
ItemsSource="{Binding MenuItems}"
Visibility="{Binding IsChecked, ElementName=toggleButton, Converter={StaticResource BoolToVisibilityConverter}}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ContentPresenter Content="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<ToggleButton x:Name="toggleButton" Content="Toggle" />
</Grid>
</UserControl>
MenuButtonControl.xaml.cs
public partial class MenuButtonControl : UserControl
{
public MenuButtonControl()
{
InitializeComponent();
DataContext = this;
}
public static readonly DependencyProperty MenuItemsProperty =
DependencyProperty.Register("ItemTemplate", typeof(ICollection<UIElement>), typeof(MenuButtonControl), new UIPropertyMetadata(null));
public ICollection<UIElement> MenuItems
{
get { return (ICollection<UIElement>)GetValue(MenuItemsProperty); }
set { SetValue(MenuItemsProperty, value); }
}
}
這個想法是我有一個切換按鈕,當我點擊它時會彈出一個選單。我想提供選單項作為控制元件集合的元素(例如按鈕)。
問題是我不知道如何配置我的控制元件以接受這些專案,如下例所示:
<Controls:MenuButtonControl Grid.Row="1">
<Button Content="Test 1" />
<Button Content="Test 2" />
<Button Content="Test 3" />
</Controls:MenuButtonControl>
uj5u.com熱心網友回復:
派生ItemsControl或裝飾您的控制元件ContentPropertyAttribute:
[ContentProperty(nameof(MenuItems))]
public partial class MenuButtonControl : UserControl
{
public MenuButtonControl()
{
InitializeComponent();
MenuItems = new ObservableCollection<UIElement>();
}
public static readonly DependencyProperty MenuItemsProperty =
DependencyProperty.Register(nameof(MenuItems), typeof(ObservableCollection<UIElement>),
typeof(MenuButtonControl), new UIPropertyMetadata(null));
public ObservableCollection<UIElement> MenuItems
{
get { return (ObservableCollection<UIElement>)GetValue(MenuItemsProperty); }
set { SetValue(MenuItemsProperty, value); }
}
}
MenuButtonControl.xaml:
<ItemsControl
x:Name="tStack"
ItemsSource="{Binding MenuItems, RelativeSource={RelativeSource AncestorType=UserControl}}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ContentPresenter Content="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
用法:
<Controls:MenuButtonControl Grid.Row="1">
<Button Content="Test 1" />
<Button Content="Test 2" />
<Button Content="Test 3" />
</Controls:MenuButtonControl>
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/521351.html
標籤:C#wpf
