在WPF中添加自定义样式

时间:2018-09-25 11:36:09

标签: c# wpf xaml

我创建了如下的自定义样式

public class MenuStyle: StyleSelector
{
    public override Style SelectStyle(object item, DependencyObject container)
    {
        // my code
    }
}

我正在xaml文件中使用此样式,如下所示。

我正在如下使用它。

添加了以下名称空间

xmlns:style="clr-namespace:MedicalStore.Styles"

将资源添加为

    <UserControl.Resources>
        <style:MenuStyle x:Key="MenuStyle"></style:MenuStyle> 
        <Style TargetType="MenuItem" x:Key="SelectedMenuItem">
            <Setter Property="Background" Value="White"></Setter>
        </Style>
    </UserControl.Resources>

并按以下方式使用

<Menu DockPanel.Dock="Top" FontSize="22" Background="Green" HorizontalAlignment="Right" x:Name="MainMenu"
              ItemsSource="{Binding Path=MenuItems}" DisplayMemberPath="Text" 
              ItemContainerStyleSelector="{Binding MenuStyle}">
        </Menu>

但是当我运行我的应用程序时,调试器从不会进入MenuStyle类。有什么问题吗?

1 个答案:

答案 0 :(得分:0)

一种好的方法是在您的Style-Class中实现MenuStyle-属性。

public class MenuStyle : StyleSelector
{
    // Declare all the style you're going to need right here
    public Style StyleMenuItem { get; set; }

    public override Style SelectStyle(object item, DependencyObject container)
    {
        // here you can check which type item is and return the corresponding style
        if(item != null && typeof(item) == typeof(YourType))
        {
             return StyleMenuItem;
        }
    }
}

这样,您可以在XAML

中进行关注
<UserControl.Resources>
    <Style TargetType="MenuItem" x:Key="SelectedMenuItemStyle">
        <Setter Property="Background" Value="White"></Setter>
    </Style>
    <style:MenuStyle x:Key="MenuStyle" StyleMenuItem="{StaticResource SelectedMenuItemStyle}"/>
</UserControl.Resources>

请注意,我更改了样式的x:Key,以使内容更清晰。

下一件事在您的Menu中:

<Menu DockPanel.Dock="Top" FontSize="22" Background="Green" HorizontalAlignment="Right" x:Name="MainMenu"
              ItemsSource="{Binding Path=MenuItems}" DisplayMemberPath="Text" 
              ItemContainerStyleSelector="{StaticResource MenuStyle}">
</Menu>

在那里,您必须使用StaticResource而不是Binding。 这应该是全部。