10

WPFウィンドウの.csファイルからスタイルプロパティ(および値)を設定できるようにしたい。

私の問題は、30個の長方形があり、それらすべてを同じスタイルにしたい場合です(そして、それらすべてを個別に更新したくない場合)。それらをすべて(xamlファイルで)同じスタイルに設定してから、スタイルを更新して希望どおりに表示したいと思います。

Style = "key1"各長方形のXamlにを設定したとします。次に、後で「key1」を変更して、すべての長方形にその変更が反映されるようにします。

試してみましたApp.xaml

<Application.Resources>
    <Style x:Key="key1" TargetType="Rectangle">
        <Setter Property="Fill" Value="Red"/>
    </Style>
</Application.Resources>

MainwWindows.xamlで

<StackPanel>
    <Rectangle Style="{StaticResource key1}" Height="200" Width="200" x:Name="rect1"/>
    <Button Click="Button_Click" Content="Click"/>
</StackPanel>

コードビハインド

private void Button_Click(object sender, RoutedEventArgs e)
{
    Style style = Application.Current.Resources["key1"] as Style;
    style.Setters.Add(new Setter(Rectangle.VisibilityProperty, Visibility.Collapsed));
}

これによりスタイルは更新されますが、長方形は更新されません。

これは可能ですか?誰かがこれを行う方法を知っていますか?(例をいただければ幸いです)。

4

3 に答える 3

15

DynamicResource実行時に変更できるように使用する必要があります。また、既存のスタイルを変更するのではなく、新しいスタイルに置き換える必要があります。これは機能します:

<StackPanel>
    <Rectangle Style="{DynamicResource key1}" Height="200" Width="200" x:Name="rect1"/>
    <Button Click="Button_Click" Content="Click"/>
</StackPanel>

Style style = new Style {TargetType = typeof(Rectangle)};
style.Setters.Add(new Setter(Shape.FillProperty, Brushes.Red));
style.Setters.Add(new Setter(UIElement.VisibilityProperty, Visibility.Collapsed));

Application.Current.Resources["key1"] = style;
于 2012-04-27T06:34:26.217 に答える
4

スタイルは一度使用すると封印されているため、変更できないことにも注意してください。これが、スタイルを更新するのではなく、別のインスタンスに置き換える必要がある理由です。

于 2015-08-07T08:29:46.980 に答える