
Email feed
- 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

Post your comment- Name:


- Verify code:


- Content:
-
top
Insert image
RSS
Login




