0

我正在尝试使用可变数量的按钮创建一个 Wpf UserControl。
在后面的代码中public string[] MenuItems { get; set; }包含了按钮的文本(Content),所以数组中的每一项都应该对应一个按钮。

我试过了:

<UserControl x:Class="MyApp.Controls.MenuButtons"
             xmlns:m="clr-namespace:MyApp.Controls"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             DataContext="{Binding RelativeSource={RelativeSource Self}}">
    <DockPanel LastChildFill="False"
               Background="{StaticResource ControlBackground}"
               DockPanel.Dock="Top"
               Height="35"
               Margin="5,0,0,0">
        <ItemsControl ItemsSource="{Binding MenuItems}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Button Content="{Binding}"
                            Style="{StaticResource MenuButton}" />
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </DockPanel>
</UserControl>

在这样的窗口中使用控件:

<c:MenuButtons MenuItems="..."></c:MenuButtons>

给出错误:成员“MenuItems”无法识别或不可访问。
MenuItems 有时会在 xaml 智能感知中被识别,有时则不会。该窗口将自身作为数据上下文:

DataContext="{Binding RelativeSource={RelativeSource Self}}"
4

1 回答 1

1

您的MenuItems属性应该是 aDependancyProperty以便将其用作绑定目标。

类型应该是字符串 [] 而不是字符串。

static readonly DependencyProperty MenuItemsProperty = DependencyProperty.Register("MenuItems", typeof(string[]), typeof(MenuButtons), new PropertyMetadata(null));
于 2013-10-10T09:37:17.430 回答