rssRSSlotinLogin
  • WPF模块化style切换
  • constriction
  • Author:zhouwenqi
  • Date:2008-7-7 20:00:28
  •   终于搞定了,写了一个类,在用数据绑定一下就可以切换风格了,我相信有更方便很合理的方法来模块化管理wpf的ui,但现在我还没有掌握,自学没办法,而且我越来越不喜欢看别人的文章和MSDN了,完全自学虽然有点慢,但效果我可以接受

     

    App.xmal
    <Application x:Class="Cai2.App"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        StartupUri="Window1.xaml"
                 xmlns:c="clr-namespace:colorX">
        <Application.Resources>
            <c:styleSource x:Key="StyleSource"></c:styleSource>
            <LinearGradientBrush StartPoint="0,0" EndPoint="0,1" x:Key="solidBG">
                <GradientStop Color="{Binding Source={StaticResource StyleSource},Path=Color1}" Offset="0.0"></GradientStop>
                <GradientStop Color="{Binding Source={StaticResource StyleSource},Path=Color2}" Offset="0.4"></GradientStop>
                <GradientStop Color="{Binding Source={StaticResource StyleSource},Path=Color3}" Offset="0.4"></GradientStop>
                <GradientStop Color="{Binding Source={StaticResource StyleSource},Path=Color4}" Offset="1.0"></GradientStop>
            </LinearGradientBrush>
            <SolidColorBrush x:Key="solidBK" Color="{Binding Source={StaticResource StyleSource},Path=BorderColor}"></SolidColorBrush>
            <SolidColorBrush x:Key="fontColor" Color="{Binding Source={StaticResource StyleSource},Path=FontColor}"></SolidColorBrush>
            <SolidColorBrush x:Key="popBG" Color="{Binding Source={StaticResource StyleSource},Path=BgColor}"></SolidColorBrush>
            <Style x:Key="solidFocusVisual">
                <Setter Property="Control.Template">
                    <Setter.Value>
                        <ControlTemplate>
                            <Border>
                                <Rectangle Stroke="Transparent" StrokeThickness="1" StrokeDashArray="1 2"></Rectangle>
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
            <ControlTemplate x:Key="ComboBoxToggleButton" TargetType="ToggleButton">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition></ColumnDefinition>
                        <ColumnDefinition Width="20"></ColumnDefinition>                   
                    </Grid.ColumnDefinitions>
                    <Border x:Name="Border" Grid.ColumnSpan="2" CornerRadius="2" BorderThickness="1" BorderBrush="{StaticResource solidBK}" Background="{StaticResource solidBG}"></Border>
                    <Border Grid.Column="0" CornerRadius="2,0,0,2" Margin="1" BorderThickness="0,0,1,0"></Border>
                    <Path x:Name="Arrow" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="1" Fill="{StaticResource solidBK}" Data="M 0 0 L 4 4 L 8 0 Z"></Path>
                </Grid>
            </ControlTemplate>       
            <Style x:Key="{x:Type ComboBox}" TargetType="ComboBox">
                <Setter Property="SnapsToDevicePixels" Value="True"></Setter>
                <Setter Property="OverridesDefaultStyle" Value="True"></Setter>
                <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"></Setter>
                <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"></Setter>
                <Setter Property="ScrollViewer.CanContentScroll" Value="True"></Setter>
                <Setter Property="Foreground" Value="{StaticResource fontColor}"></Setter>
                <Setter Property="MinWidth" Value="120"></Setter>
                <Setter Property="MinHeight" Value="20"></Setter>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="ComboBox">
                            <Grid>
                                <ToggleButton Name="ToggleButton" Template="{StaticResource ComboBoxToggleButton}" Grid.Column="2" Focusable="False" IsChecked="{Binding Path=IsDropDownOpen,Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent}}" ClickMode="Press"></ToggleButton>
                                <ContentPresenter Name="ContentSite" IsHitTestVisible="False" Content="{TemplateBinding SelectionBoxItem}" ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" Margin="3,3,23,3"></ContentPresenter>
                                <Popup Name="Popup" Placement="Bottom" IsOpen="{TemplateBinding IsDropDownOpen}" AllowsTransparency="True" Focusable="False" PopupAnimation="Slide">
                                    <Grid Name="DropDown" SnapsToDevicePixels="True" MinWidth="{TemplateBinding ActualWidth}" MaxHeight="{TemplateBinding MaxDropDownHeight}">
                                        <Border Name="DropDownBorder" Background="{StaticResource popBG}" BorderThickness="1" BorderBrush="{StaticResource solidBK}">
                                            <ScrollViewer Margin="4,6,4,6" SnapsToDevicePixels="True">
                                                <StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained"></StackPanel>
                                            </ScrollViewer>
                                        </Border>
                                    </Grid>
                                </Popup>
                            </Grid>
                            <ControlTemplate.Triggers>
                                <Trigger Property="HasItems" Value="False">
                                    <Setter TargetName="DropDownBorder" Property="MinHeight" Value="95"></Setter>
                                </Trigger>
                                <Trigger Property="IsGrouping" Value="True">
                                    <Setter Property="ScrollViewer.CanContentScroll" Value="False"></Setter>
                                </Trigger>
                                <Trigger SourceName="Popup" Property="Popup.AllowsTransparency" Value="True">
                                    <Setter TargetName="DropDownBorder" Property="CornerRadius" Value="2"></Setter>
                                    <Setter TargetName="DropDownBorder" Property="Margin" Value="0,2,0,0"></Setter>
                                </Trigger>
                                <Trigger Property="IsEditable" Value="True">
                                    <Setter Property="IsTabStop" Value="False"></Setter>
                                    <Setter TargetName="ContentSite" Property="Visibility" Value="Hidden"></Setter>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
            <Style x:Key="{x:Type ComboBoxItem}" TargetType="ComboBoxItem">
                <Setter Property="SnapsToDevicePixels" Value="True"></Setter>
                <Setter Property="OverridesDefaultStyle" Value="True"></Setter>
                <Setter Property="FocusVisualStyle" Value="{StaticResource solidFocusVisual}"></Setter>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="ComboBoxItem">
                            <Border Name="Border" Margin="2" Padding="2" SnapsToDevicePixels="True" BorderBrush="Transparent" BorderThickness="1" CornerRadius="1">
                                <ContentPresenter></ContentPresenter>
                            </Border>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsHighlighted" Value="True">
                                    <Setter TargetName="Border" Property="Background" Value="{StaticResource solidBG}"></Setter>
                                    <Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource solidBK}"></Setter>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
            <Style x:Key="{x:Type RadioButton}" TargetType="RadioButton">
                <Setter Property="SnapsToDevicePixels" Value="True"></Setter>
                <Setter Property="OverridesDefaultStyle" Value="True"></Setter>
                <Setter Property="FocusVisualStyle" Value="{StaticResource solidFocusVisual}"></Setter>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type RadioButton}">
                            <BulletDecorator Background="Transparent">
                                <BulletDecorator.Bullet>
                                    <Grid Height="13" Width="13">
                                        <Ellipse x:Name="Border" Fill="{StaticResource solidBG}" Stroke="{StaticResource solidBK}" StrokeThickness="1"></Ellipse>
                                        <Ellipse x:Name="BorderMask" Margin="4" Fill="{StaticResource solidBK}"></Ellipse>
                                    </Grid>
                                </BulletDecorator.Bullet>
                                <ContentPresenter Margin="4,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Center" RecognizesAccessKey="True"></ContentPresenter>
                            </BulletDecorator>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsChecked" Value="False">
                                    <Setter TargetName="BorderMask" Property="Fill" Value="Transparent"></Setter>
                                </Trigger>
                                <Trigger Property="IsPressed" Value="True">
                                    <Setter TargetName="Border" Property="StrokeThickness" Value="2"></Setter>                               
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
            <Style TargetType="Button">
                <Setter Property="Foreground" Value="{StaticResource fontColor}"></Setter>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="Button">
                            <Border x:Name="Border" CornerRadius="2" BorderBrush="{StaticResource solidBK}" BorderThickness="1" Background="{StaticResource solidBG}" Margin="4" Padding="4">
                                <ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center" RecognizesAccessKey="True"></ContentPresenter>
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </Application.Resources>
    </Application>

     

    Window1.xmal
    <Window x:Class="Cai2.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="317" Margin="8" FontFamily="雅黑" FontSize="14" Loaded="Window_Loaded">
        <StackPanel>
            <StackPanel>
                <ComboBox Margin="8" Text="{Binding Source={StaticResource StyleSource},Path=StyleName}">
                    <ComboBoxItem>Green style</ComboBoxItem>
                    <ComboBoxItem>Orange style</ComboBoxItem>
                    <ComboBoxItem>Blue style</ComboBoxItem>
                    <ComboBoxItem>Red style</ComboBoxItem>
                </ComboBox>
            </StackPanel>       
            <StackPanel Margin="8">           
                <RadioButton>Windows 2003</RadioButton>
                <RadioButton IsChecked="True">Windows XP</RadioButton>
                <RadioButton>Windows Vista</RadioButton>
                <RadioButton>Windows 7</RadioButton>
            </StackPanel>       
            <StackPanel Margin="8" Orientation="Horizontal">
                <Button>Sbumit</Button>
                <Button>Reset</Button>
            </StackPanel>
        </StackPanel> 
    </Window> 
  • Tags:wpfstyle
  • comments
  • constriction
Copyright © 2005-2009 Wenqi blog All Rights Reserved.
logo