Добавление собственного стиля в WPF - PullRequest
0 голосов
/ 25 сентября 2018

Я создал собственный стиль, как показано ниже

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 голосов
/ 25 сентября 2018

Хороший подход заключается в реализации Style -свойств в вашем 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.Это должно быть все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...