хотите изменить цвет окна, используя XAML RESOURCE FILE

1

Я хочу изменить цвет окна, применяя стиль, определенный в XAML RESOURCE FILE. Я создал стиль с целевым типом, установленным в окно без ключа (при условии, что он будет автоматически применен ко всем окнам). Но стиль не применяется к окнам в моем приложении. использование ниже кода работает только для элементов управления в окне, но оно не меняет цвет самого окна. Пожалуйста, дайте мне знать, где я ошибаюсь. Если я даю сетку целевого типа, она меняет цвет, но если я даю окно, то он не меняет цвет

файл ресурсов

<Color x:Key="MainBackgroundColor"></Color>

<SolidColorBrush x:Key="MainBackground" 
                    Color="{Binding Path=DataContext.MainApplicationColor,
    UpdateSourceTrigger=PropertyChanged,
    RelativeSource={RelativeSource AncestorType={x:Type Window}, Mode=FindAncestor}, 
    FallbackValue={StaticResource MainBackgroundColor}}"/>


<Style TargetType="Window">
    <Setter Property="Background" Value="{StaticResource MainBackground}" />            
</Style>

Посмотреть

<Window x:Class="MvvmLight1.View.MainMenuView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:ignore="http://www.ignore.com"
        mc:Ignorable="d ignore"  Name="x_main" 
        >
    <Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/ColorResources.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Window.Resources>
    <Grid Height="60" Width="60">
    </Grid>

</Window>

просмотреть модель *

public string ChangeColorCommandText { get; set; }
private RelayCommand m_cmdChangeColor;
public ICommand ChangeColor
{
    get { return m_cmdChangeColor ?? (m_cmdChangeColor = new RelayCommand(ChangeColorAction, () => true)); }
}


private void ChangeColorAction()
{
    MainApplicationColor = (Color)ColorConverter.ConvertFromString("#4484F3");
}
Теги:
xaml
wpf
resources
mvvm

1 ответ

1
Лучший ответ

Причина, по которой тип Target не применяется к вашему окну, заключается в том, что здесь вы используете производный тип окна с именем "MainMenuView". TargetType в стилях не управляет производными типами. Поэтому в вашем ресурсе стиля вы должны установить целевой тип как производный тип (MainMenuView). Поступая таким образом, он будет применяться только к окну MainMenuView.

xmlns:local="Yournamespace:YourApplication"

<Style  TargetType="local:MainMenuView">
     <Setter Property="Background" Value="Green" />
</Style>

Чтобы применить стиль ко всем вашим окнам в вашем приложении, необходимо, чтобы вы установили x: Key для определенного стиля и ссылались на стиль из всех окон либо в xaml, либо в коде позади.

  • 0
    @Sivasubramaniam: спасибо большое, это работает для меня
  • 0
    Пожалуйста. :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню