如何让用户在运行时编辑控件样式?

时间:2011-03-08 11:09:30

标签: c# wpf silverlight controls styles

通过在某些自定义控件样式中设置个人值,可以使用哪种方法使用户能够定义自己的应用程序首选项?

我们可以在设计时在XAML中设置它们:

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

但是如何在运行时编辑这些样式值?

1 个答案:

答案 0 :(得分:1)

您需要将样式中的值绑定到某个静态类 - 例如,应用程序的默认设置 - 可以通过任何类修改值来修改值。

在下面的应用中,我在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();
}