2

私はこのようなスタイルを持っています:

<Style TargetType="{x:Type Button}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
               ...
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

デフォルトでは、すべての OS のすべてのボタンに適用されますが、ユーザーが Windows 8 を使用している場合にのみ適用したいと考えています。

Environment.OSVersion.Versionプロパティをチェックした後、コード ビハインドからスタイルを有効にする方法はありますか? または、これを行うより良い方法はありますか?

4

2 に答える 2

1

ブートストラップ コード (XAML が表示される前に実行されるもの) を見つけ、OS バージョンに基づいて正しい XAML ファイルを選択する単純なスイッチを作成します。

Uri uri = new Uri("/OS7.xaml", UriKind.Relative);
StreamResourceInfo info = Application.GetResourceStream(uri);
XamlReader reader = new System.Windows.Markup.XamlReader();
var dic = (ResourceDictionary)reader.LoadAsync(info.Stream);

//then locate ResourceDictionary throgh Application.Current.Resources
yourDictionary.MergedDictionaries.Add(dic);

静的な OS バージョン プロパティにバインドし、Button のテンプレートを切り替える単純なトリガーを作成することもできますが、テンプレートしか交換できないため、かなり制限があります。それはあなたを助けるかもしれません。

   <Window.Resources>
                    <ControlTemplate x:Key="OS7" TargetType="Button">
                        <Border x:Name="Border" CornerRadius="2" BorderThickness="1" Background="blue" BorderBrush="blue">
                            <ContentPresenter Margin="2" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                        </Border>
                    </ControlTemplate>


        <!-- DEFALT -->
        <Style TargetType="Button">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                        <Border x:Name="Border" CornerRadius="2" BorderThickness="1" Background="red" BorderBrush="blue">
                            <ContentPresenter Margin="2" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>

            <Style.Triggers>
                <!-- Just an example. Replace IsMouseOver with DataTrigger and STATIC binding against OS version-->
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Template" Value="{StaticResource OS7}" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>
于 2013-04-17T17:39:42.477 に答える