Как разрешить пользователям редактировать стиль элемента управления во время выполнения? - PullRequest
0 голосов
/ 08 марта 2011

Какой подход можно использовать для предоставления пользователям возможности определять свои собственные настройки приложения, устанавливая личные значения в некоторых пользовательских стилях элементов управления?

Мы можем установить их в XAML во время разработки:

<UserControl.Resources>
    <Style TargetType="{x:Type cc:MyControl}">
            <Setter Property="SWidth" Value="20" />
            ...
            <Setter Property="SBrush" Value="Blue" />              
    </Style>
</UserControl.Resources>

Но как редактировать эти значения стиля во время выполнения?

1 Ответ

1 голос
/ 08 марта 2011

Вы захотите привязать значения в вашем стиле к некоторому статическому классу - например, к настройкам приложения по умолчанию - который может быть изменен любым классом, определяющим, какими должны быть значения.

В приложении ниже я создал свойство с именем FontSize в файле Settings.settings. Я добавил соответствующее пространство имен в файл XAML и теперь могу привязываться к нему, как мне нравится:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:my="clr-namespace:WpfApplication1"
        xmlns:prop="clr-namespace:WpfApplication1.Properties"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto" />
            <RowDefinition Height="auto" />
            <RowDefinition />
        </Grid.RowDefinitions>

        <Grid.Resources>
            <Style TargetType="TextBlock" x:Key="myStyle">
                <Setter Property="FontSize" Value="{Binding FontSize, Source={x:Static prop:Settings.Default}}" />
            </Style>
        </Grid.Resources>

        <TextBlock Style="{DynamicResource myStyle}" Text="The quick brown fox jumped over the lazy dog." />

        <TextBox Grid.Row="1" Text="{Binding FontSize, Source={x:Static prop:Settings.Default}, UpdateSourceTrigger=PropertyChanged}" />
    </Grid>
</Window>

Я связал значение непосредственно с TextBox, но само собой разумеется, что настоятельно рекомендуется какой-то механизм управления, например, в модели представления.

Наконец, если вы хотите сохранить настройки, все, что вам нужно сделать, это вызвать метод класса Save, например, в обработчике события приложения Exit:

private void Application_Exit(object sender, ExitEventArgs e)
{
    WpfApplication1.Properties.Settings.Default.Save();
}
...