窗体管理对象
public class WindowManager
{
static Dictionary<string, WindowStruct> _regWindows = new Dictionary<string, WindowStruct>();
public static void Register<T>(string name, Window owner = null)
{
if (!_regWindows.ContainsKey(name))
_regWindows.Add(name, new WindowStruct { WindowType = typeof(T), Owner = owner });
}
public static bool ShowDialog(string name, object vm)
{
if (_regWindows.ContainsKey(name))
{
Type type = _regWindows[name].WindowType;
var win = (Window)Activator.CreateInstance(type);
win.Owner = _regWindows[name].Owner;
win.DataContext = vm;
return win.ShowDialog() == true;
}
return false;
}
}
public class WindowStruct
{
public Type WindowType { get; set; }
public Window Owner { get; set; }
}
父窗体注册子窗体
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainViewModel();
WindowManager.Register<DeviceEditWindow>("DeviceEditWindow", this);
}
private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
this.DragMove();
}
}
子窗体包含到父窗体
<Window x:Class="Zhaoxi.HostComputer.Views.DeviceEditWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Zhaoxi.HostComputer.Views"
xmlns:sys="clr-namespace:System;assembly=System.Runtime"
mc:Ignorable="d" UseLayoutRounding="True"
FontFamily="Microsoft YaHei" FontWeight="ExtraLight" Foreground="#333"
WindowStyle="None" AllowsTransparency="True" WindowStartupLocation="CenterOwner" Background="Transparent"
Title="设备信息维护" Height="550" Width="800">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Zhaoxi.HostComputer;component/Assets/Styles/ComboBoxStyle.xaml"/>
<ResourceDictionary Source="pack://application:,,,/Zhaoxi.HostComputer;component/Assets/Styles/LeftTabControlStyle.xaml"/>
<ResourceDictionary>
<Style TargetType="Button" x:Key="ControlButtonStyle">
<Setter Property="FontSize" Value="12"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid Background="Transparent" Height="30" Width="45" Name="back">
<Border Name="hover" Background="{TemplateBinding Background}" Visibility="Collapsed"/>
<TextBlock Text="{TemplateBinding Content}" FontFamily="{StaticResource iconfont}"
VerticalAlignment="Center" HorizontalAlignment="Center" Name="txt"
Foreground="White"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Visibility" Value="Visible" TargetName="hover"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="{Binding Tag,RelativeSource={RelativeSource Mode=Self}}"/>
</Trigger>
</Style.Triggers>
</Style>
<ControlTemplate TargetType="Button" x:Key="AddButtonTemplate">
<Border Background="{TemplateBinding Background}" CornerRadius="3">
<Border Name="back">
<ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center"
Content="{TemplateBinding Content}" TextBlock.Foreground="White"/>
</Border>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#22000000" TargetName="back"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
<x:Array Type="sys:String" x:Key="datas">
<sys:String>1</sys:String>
<sys:String>2</sys:String>
<sys:String>3</sys:String>
<sys:String>4</sys:String>
<sys:String>5</sys:String>
<sys:String>6</sys:String>
<sys:String>7</sys:String>
</x:Array>
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Border Margin="5" Background="#FFF6F7FC">
<Border.Effect>
<DropShadowEffect BlurRadius="8" Opacity="0.2" Direction="0" Color="Gray" ShadowDepth="0"/>
</Border.Effect>
<Grid MouseLeftButtonDown="Grid_MouseLeftButtonDown">
<Grid.RowDefinitions>
<RowDefinition Height="80"/>
<!--<RowDefinition Height="40"/>
<RowDefinition Height="40"/>
<RowDefinition Height="40"/>
<RowDefinition Height="40"/>
<RowDefinition Height="10"/>
<RowDefinition Height="40"/>-->
<RowDefinition/>
<!--<RowDefinition Height="50"/>-->
</Grid.RowDefinitions>
<Border Background="#FF3269DE"/>
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Left">
<TextBlock Text="设备信息编辑" Foreground="White" VerticalAlignment="Center" Margin="15,0"/>
<TextBlock Text="{Binding Name}" Foreground="White" VerticalAlignment="Center" Margin="15,20,0,5"
FontSize="18"/>
</StackPanel>
<Button Content="" Style="{StaticResource ControlButtonStyle}" Background="#11000000" Tag="#333" Height="33" VerticalAlignment="Top"
HorizontalAlignment="Right" Click="Button_Click"/>
<TabControl Grid.Row="1" BorderThickness="0" Margin="0,20">
<TabItem Header="通信配置">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="40"/>
<RowDefinition Height="40"/>
<RowDefinition Height="40"/>
<RowDefinition Height="40"/>
<RowDefinition Height="40"/>
<RowDefinition Height="40"/>
<RowDefinition Height="40"/>
<RowDefinition/>
<RowDefinition Height="50"/>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal" Margin="30,0" VerticalAlignment="Center">
<TextBlock Text="通信方式" Margin="20,0"/>
<RadioButton Content="串口" IsChecked="True" Click="RadioButton_Checked"/>
<RadioButton Content="网口" Margin="15,0" Click="RadioButton_Checked"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Grid.Row="1" Margin="30,0" VerticalAlignment="Center">
<TextBlock Text="通信参数" Margin="20,0" VerticalAlignment="Center"/>
<ComboBox SelectedIndex="0" Width="80" x:Name="cb1">
<ComboBoxItem Content="COM1"/>
<ComboBoxItem Content="COM2"/>
</ComboBox>
<ComboBox SelectedIndex="1" Width="80" Margin="7,0" x:Name="cb2">
<ComboBoxItem Content="4800"/>
<ComboBoxItem Content="9600"/>
<ComboBoxItem Content="19200"/>
</ComboBox>
<ComboBox SelectedIndex="1" Width="50" x:Name="cb3">
<ComboBoxItem Content="7"/>
<ComboBoxItem Content="8"/>
</ComboBox>
<ComboBox SelectedIndex="0" Width="70" Margin="7,0" x:Name="cb4">
<ComboBoxItem Content="None"/>
<ComboBoxItem Content="Odd"/>
<ComboBoxItem Content="Even"/>
</ComboBox>
<ComboBox SelectedIndex="0" Width="70" x:Name="cb5">
<ComboBoxItem Content="One"/>
<ComboBoxItem Content="Two"/>
</ComboBox>
<TextBox Text="192.168.2.1" VerticalContentAlignment="Center" Width="100" x:Name="tb1"
Visibility="Collapsed" Height="26"/>
<TextBox Text="102" VerticalContentAlignment="Center" Width="50" Margin="7,0" x:Name="tb2"
Visibility="Collapsed"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Grid.Row="2" Margin="30,0" VerticalAlignment="Center">
<TextBlock Text="通信协议" Margin="20,0" VerticalAlignment="Center"/>
<ComboBox SelectedIndex="0" Width="167">
<ComboBoxItem Content="ModbusRTU"/>
<ComboBoxItem Content="ModbusASCII"/>
<ComboBoxItem Content="ModbusTCP"/>
<ComboBoxItem Content="S7-200SMART"/>
<ComboBoxItem Content="S7-1500"/>
</ComboBox>
</StackPanel>
<StackPanel Orientation="Horizontal" Grid.Row="3" Margin="30,0" VerticalAlignment="Center">
<TextBlock Text="设备站号" Margin="20,0" VerticalAlignment="Center"/>
<TextBox Text="01" Height="23" VerticalContentAlignment="Center" Width="167"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Grid.Row="4" Margin="30,0" VerticalAlignment="Center">
<TextBlock Text="机 架 号" Margin="19,0" VerticalAlignment="Center"/>
<TextBox Text="00" Height="23" VerticalContentAlignment="Center" Width="167"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Grid.Row="5" Margin="30,0" VerticalAlignment="Center">
<TextBlock Text="插 槽 号" Margin="19,0" VerticalAlignment="Center"/>
<TextBox Text="01" Height="23" VerticalContentAlignment="Center" Width="167"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Grid.Row="6" Margin="30,0" VerticalAlignment="Center">
<TextBlock Text="刷新频率" Margin="20,0" VerticalAlignment="Center"/>
<ComboBox SelectedIndex="2" Width="167">
<ComboBoxItem Content="10ms"/>
<ComboBoxItem Content="50ms"/>
<ComboBoxItem Content="500ms"/>
<ComboBoxItem Content="1000ms"/>
<ComboBoxItem Content="2000ms"/>
</ComboBox>
</StackPanel>
<StackPanel Orientation="Horizontal" Grid.Row="8" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="50,0">
<Button Content="保存" Template="{StaticResource AddButtonTemplate}" Width="75" Height="28" Margin="5,0"
Background="#FF3269DE"/>
<Button Content="退出" Template="{StaticResource AddButtonTemplate}" Width="55" Height="28"
Background="#999" Visibility="Collapsed"/>
</StackPanel>
</Grid>
</TabItem>
<TabItem Header="监控点位">
<Grid Grid.Row="7">
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition/>
<RowDefinition Height="50"/>
</Grid.RowDefinitions>
<Grid Background="#EEE" Margin="10,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="45"/>
<ColumnDefinition/>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="100"/>
</Grid.ColumnDefinitions>
<TextBlock Text="序号" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<TextBlock Text="监控标签" VerticalAlignment="Center" HorizontalAlignment="Left" Grid.Column="1"/>
<TextBlock Text="寄存器地址" VerticalAlignment="Center" HorizontalAlignment="Center" Grid.Column="2"/>
<TextBlock Text="单位" VerticalAlignment="Center" HorizontalAlignment="Center" Grid.Column="3"/>
<TextBlock Text="数据类型" VerticalAlignment="Center" HorizontalAlignment="Center" Grid.Column="4"/>
<TextBlock Text="操作" VerticalAlignment="Center" HorizontalAlignment="Center" Grid.Column="5"/>
</Grid>
<ItemsControl Grid.Row="1" ItemsSource="{Binding Source={StaticResource datas}}" Margin="10,0">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Background="Transparent" Height="30">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="45"/>
<ColumnDefinition/>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="100"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<TextBlock Text="电源电压" Grid.Column="1" VerticalAlignment="Center" />
<TextBlock Text="VW100" Grid.Column="2" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<TextBlock Text="kv" Grid.Column="3" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<TextBlock Text="ushort" Grid.Column="4" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<TextBlock Grid.Column="5" VerticalAlignment="Center" HorizontalAlignment="Center">
<Hyperlink>编辑</Hyperlink>
<Hyperlink>删除</Hyperlink>
</TextBlock>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<Button Content="添加点位配置" Grid.Row="8" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="10,0"
Height="28" Width="120" Background="#FF3269DE"
Template="{StaticResource AddButtonTemplate}"/>
</Grid>
</TabItem>
</TabControl>
<!--<Border Grid.Row="2" Background="White"/>-->
</Grid>
</Border>
</Window>
/// <summary>
/// DeviceEditWindow.xaml 的交互逻辑
/// </summary>
public partial class DeviceEditWindow : Window
{
public DeviceEditWindow()
{
InitializeComponent();
}
private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
this.DragMove();
}
private void RadioButton_Checked(object sender, RoutedEventArgs e)
{
if ((sender as RadioButton).Content.ToString() == "串口")
{
this.cb1.Visibility = Visibility.Visible;
this.cb2.Visibility = Visibility.Visible;
this.cb3.Visibility = Visibility.Visible;
this.cb4.Visibility = Visibility.Visible;
this.cb5.Visibility = Visibility.Visible;
this.tb1.Visibility = Visibility.Collapsed;
this.tb2.Visibility = Visibility.Collapsed;
}
else if ((sender as RadioButton).Content.ToString() == "网口")
{
this.cb1.Visibility = Visibility.Collapsed;
this.cb2.Visibility = Visibility.Collapsed;
this.cb3.Visibility = Visibility.Collapsed;
this.cb4.Visibility = Visibility.Collapsed;
this.cb5.Visibility = Visibility.Collapsed;
this.tb1.Visibility = Visibility.Visible;
this.tb2.Visibility = Visibility.Visible;
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
}
样式类
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero2"
xmlns:local="Zhaoxi.MvvmLesson.View.Styles">
<SolidColorBrush x:Key="TextBox.Static.Background" Color="#FFFFFFFF"/>
<SolidColorBrush x:Key="ComboBox.Static.Border" Color="#FFACACAC"/>
<SolidColorBrush x:Key="ComboBox.Static.Glyph" Color="#FF606060"/>
<SolidColorBrush x:Key="ComboBox.Static.Editable.Button.Background" Color="Transparent"/>
<SolidColorBrush x:Key="ComboBox.Static.Editable.Button.Border" Color="Transparent"/>
<LinearGradientBrush x:Key="ComboBox.MouseOver.Editable.Button.Background" EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#FFEBF4FC" Offset="0.0"/>
<GradientStop Color="#FFDCECFC" Offset="1.0"/>
</LinearGradientBrush>
<SolidColorBrush x:Key="ComboBox.MouseOver.Editable.Button.Border" Color="#FF7EB4EA"/>
<LinearGradientBrush x:Key="ComboBox.Pressed.Editable.Button.Background" EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#FFDAEBFC" Offset="0.0"/>
<GradientStop Color="#FFC4E0FC" Offset="1.0"/>
</LinearGradientBrush>
<SolidColorBrush x:Key="ComboBox.Pressed.Editable.Button.Border" Color="#FF569DE5"/>
<SolidColorBrush x:Key="ComboBox.Disabled.Editable.Button.Background" Color="Transparent"/>
<SolidColorBrush x:Key="ComboBox.Disabled.Editable.Button.Border" Color="Transparent"/>
<Style x:Key="ComboBoxToggleButton" TargetType="{x:Type ToggleButton}">
<Setter Property="OverridesDefaultStyle" Value="true"/>
<Setter Property="IsTabStop" Value="false"/>
<Setter Property="Focusable" Value="false"/>
<Setter Property="ClickMode" Value="Press"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<Border x:Name="templateRoot" SnapsToDevicePixels="true"
Background="{TemplateBinding Background}"
BorderThickness="{TemplateBinding BorderThickness}"
BorderBrush="{StaticResource ComboBox.Static.Border}"
CornerRadius="2">
<Border x:Name="splitBorder" Width="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}"
SnapsToDevicePixels="true" Margin="0" HorizontalAlignment="Right"
BorderThickness="1" BorderBrush="Transparent">
<TextBlock Text="" FontFamily="{DynamicResource iconfont}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Border>
</Border>
<ControlTemplate.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsEditable, RelativeSource={RelativeSource AncestorType={x:Type ComboBox}}}" Value="true"/>
<Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="false"/>
<Condition Binding="{Binding IsPressed, RelativeSource={RelativeSource Self}}" Value="false"/>
<Condition Binding="{Binding IsEnabled, RelativeSource={RelativeSource Self}}" Value="true"/>
</MultiDataTrigger.Conditions>
<Setter Property="Background" TargetName="splitBorder" Value="{StaticResource ComboBox.Static.Editable.Button.Background}"/>
<Setter Property="BorderBrush" TargetName="splitBorder" Value="{StaticResource ComboBox.Static.Editable.Button.Border}"/>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="true"/>
<Condition Binding="{Binding IsEditable, RelativeSource={RelativeSource AncestorType={x:Type ComboBox}}}" Value="true"/>
</MultiDataTrigger.Conditions>
<Setter Property="Background" TargetName="splitBorder" Value="{StaticResource ComboBox.MouseOver.Editable.Button.Background}"/>
<Setter Property="BorderBrush" TargetName="splitBorder" Value="{StaticResource ComboBox.MouseOver.Editable.Button.Border}"/>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsPressed, RelativeSource={RelativeSource Self}}" Value="true"/>
<Condition Binding="{Binding IsEditable, RelativeSource={RelativeSource AncestorType={x:Type ComboBox}}}" Value="true"/>
</MultiDataTrigger.Conditions>
<Setter Property="Background" TargetName="splitBorder" Value="{StaticResource ComboBox.Pressed.Editable.Button.Background}"/>
<Setter Property="BorderBrush" TargetName="splitBorder" Value="{StaticResource ComboBox.Pressed.Editable.Button.Border}"/>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsEnabled, RelativeSource={RelativeSource Self}}" Value="false"/>
<Condition Binding="{Binding IsEditable, RelativeSource={RelativeSource AncestorType={x:Type ComboBox}}}" Value="true"/>
</MultiDataTrigger.Conditions>
<Setter Property="Background" TargetName="splitBorder" Value="{StaticResource ComboBox.Disabled.Editable.Button.Background}"/>
<Setter Property="BorderBrush" TargetName="splitBorder" Value="{StaticResource ComboBox.Disabled.Editable.Button.Border}"/>
</MultiDataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="ComboBoxEditableTextBox" TargetType="{x:Type TextBox}">
<Setter Property="OverridesDefaultStyle" Value="true"/>
<Setter Property="AllowDrop" Value="true"/>
<Setter Property="MinWidth" Value="0"/>
<Setter Property="MinHeight" Value="0"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst"/>
<Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<ScrollViewer x:Name="PART_ContentHost" Background="Transparent" Focusable="false" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<ControlTemplate x:Key="ComboBoxTemplate" TargetType="{x:Type ComboBox}">
<Grid x:Name="templateRoot" SnapsToDevicePixels="true">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition MinWidth="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}" Width="0"/>
</Grid.ColumnDefinitions>
<Popup x:Name="PART_Popup" AllowsTransparency="true" Grid.ColumnSpan="2"
IsOpen="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
Margin="1" PopupAnimation="{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}" Placement="Bottom">
<Themes:SystemDropShadowChrome x:Name="shadow" Color="Transparent"
MaxHeight="{TemplateBinding MaxDropDownHeight}"
MinWidth="{Binding ActualWidth, ElementName=templateRoot}">
<Border x:Name="dropDownBorder"
BorderBrush="{DynamicResource ComboBox.Static.Border}"
BorderThickness="1"
Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}">
<ScrollViewer x:Name="DropDownScrollViewer">
<Grid x:Name="grid" RenderOptions.ClearTypeHint="Enabled">
<Canvas x:Name="canvas" HorizontalAlignment="Left" Height="0" VerticalAlignment="Top" Width="0">
<Rectangle x:Name="opaqueRect" Fill="{Binding Background, ElementName=dropDownBorder}" Height="{Binding ActualHeight, ElementName=dropDownBorder}" Width="{Binding ActualWidth, ElementName=dropDownBorder}"/>
</Canvas>
<ItemsPresenter x:Name="ItemsPresenter" KeyboardNavigation.DirectionalNavigation="Contained" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Grid>
</ScrollViewer>
</Border>
</Themes:SystemDropShadowChrome>
</Popup>
<ToggleButton x:Name="toggleButton" BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="White" Grid.ColumnSpan="2"
IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
Style="{StaticResource ComboBoxToggleButton}"/>
<ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
Content="{TemplateBinding SelectionBoxItem}"
ContentStringFormat="{TemplateBinding SelectionBoxItemStringFormat}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
IsHitTestVisible="false" Margin="{TemplateBinding Padding}"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="HasDropShadow" SourceName="PART_Popup" Value="true">
<Setter Property="Margin" TargetName="shadow" Value="0,0,5,5"/>
<Setter Property="Color" TargetName="shadow" Value="#71000000"/>
</Trigger>
<Trigger Property="HasItems" Value="false">
<Setter Property="Height" TargetName="dropDownBorder" Value="95"/>
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsGrouping" Value="true"/>
<Condition Property="VirtualizingPanel.IsVirtualizingWhenGrouping" Value="false"/>
</MultiTrigger.Conditions>
<Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
</MultiTrigger>
<Trigger Property="ScrollViewer.CanContentScroll" SourceName="DropDownScrollViewer" Value="false">
<Setter Property="Canvas.Top" TargetName="opaqueRect" Value="{Binding VerticalOffset, ElementName=DropDownScrollViewer}"/>
<Setter Property="Canvas.Left" TargetName="opaqueRect" Value="{Binding HorizontalOffset, ElementName=DropDownScrollViewer}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
<ControlTemplate x:Key="ComboBoxEditableTemplate" TargetType="{x:Type ComboBox}">
<Grid x:Name="templateRoot" SnapsToDevicePixels="true">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition MinWidth="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}" Width="0"/>
</Grid.ColumnDefinitions>
<Popup x:Name="PART_Popup" AllowsTransparency="true" Grid.ColumnSpan="2"
IsOpen="{Binding IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}}"
PopupAnimation="{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}"
Placement="Bottom">
<Border x:Name="shadow" Background="Transparent" BorderBrush="#999" BorderThickness="1"
MaxHeight="{TemplateBinding MaxDropDownHeight}"
MinWidth="{Binding ActualWidth, ElementName=templateRoot}">
<Border x:Name="dropDownBorder" BorderBrush="{DynamicResource {x:Static SystemColors.WindowFrameBrushKey}}"
BorderThickness="0" Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}">
<ScrollViewer x:Name="DropDownScrollViewer">
<Grid x:Name="grid" RenderOptions.ClearTypeHint="Enabled">
<Canvas x:Name="canvas" HorizontalAlignment="Left" Height="0" VerticalAlignment="Top" Width="0">
<Rectangle x:Name="opaqueRect"
Fill="{Binding Background, ElementName=dropDownBorder}"
Height="{Binding ActualHeight, ElementName=dropDownBorder}"
Width="{Binding ActualWidth, ElementName=dropDownBorder}"/>
</Canvas>
<ItemsPresenter x:Name="ItemsPresenter" KeyboardNavigation.DirectionalNavigation="Contained" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Grid>
</ScrollViewer>
</Border>
</Border>
</Popup>
<ToggleButton x:Name="toggleButton" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Grid.ColumnSpan="2" IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" Style="{StaticResource ComboBoxToggleButton}"/>
<Border x:Name="border" Background="{StaticResource TextBox.Static.Background}" Margin="{TemplateBinding BorderThickness}">
<TextBox x:Name="PART_EditableTextBox" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" IsReadOnly="{Binding IsReadOnly, RelativeSource={RelativeSource TemplatedParent}}" Margin="{TemplateBinding Padding}" Style="{StaticResource ComboBoxEditableTextBox}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Opacity" TargetName="border" Value="0.56"/>
</Trigger>
<Trigger Property="IsKeyboardFocusWithin" Value="true">
<Setter Property="Foreground" Value="Black"/>
</Trigger>
<Trigger Property="HasDropShadow" SourceName="PART_Popup" Value="true">
<Setter Property="Margin" TargetName="shadow" Value="0,0,5,5"/>
<Setter Property="Background" TargetName="shadow" Value="#71000000"/>
</Trigger>
<Trigger Property="HasItems" Value="false">
<Setter Property="Height" TargetName="dropDownBorder" Value="95"/>
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsGrouping" Value="true"/>
<Condition Property="VirtualizingPanel.IsVirtualizingWhenGrouping" Value="false"/>
</MultiTrigger.Conditions>
<Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
</MultiTrigger>
<Trigger Property="ScrollViewer.CanContentScroll" SourceName="DropDownScrollViewer" Value="false">
<Setter Property="Canvas.Top" TargetName="opaqueRect" Value="{Binding VerticalOffset, ElementName=DropDownScrollViewer}"/>
<Setter Property="Canvas.Left" TargetName="opaqueRect" Value="{Binding HorizontalOffset, ElementName=DropDownScrollViewer}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="Background" Value="White"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
<Setter Property="Padding" Value="6,3,5,3"/>
<Setter Property="ScrollViewer.CanContentScroll" Value="true"/>
<Setter Property="ScrollViewer.PanningMode" Value="Both"/>
<Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Template" Value="{StaticResource ComboBoxTemplate}"/>
<Setter Property="Effect">
<Setter.Value>
<DropShadowEffect BlurRadius="5" ShadowDepth="0" Direction="0" Color="Gray" Opacity="0.2"/>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsEditable" Value="true">
<Setter Property="IsTabStop" Value="false"/>
<Setter Property="Padding" Value="2"/>
<Setter Property="Template" Value="{StaticResource ComboBoxEditableTemplate}"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Effect">
<Setter.Value>
<DropShadowEffect BlurRadius="10" ShadowDepth="0" Direction="0" Color="Gray" Opacity="0.3"/>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
<Style TargetType="ComboBoxItem">
<Setter Property="Height" Value="28"/>
</Style>
</ResourceDictionary>
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<SolidColorBrush x:Key="TabItem.Selected.Background" Color="#FFFFFF"/>
<SolidColorBrush x:Key="TabItem.Selected.Border" Color="#ACACAC"/>
<Style TargetType="TabControl">
<Setter Property="Padding" Value="2"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Background" Value="{StaticResource TabItem.Selected.Background}"/>
<Setter Property="BorderBrush" Value="{StaticResource TabItem.Selected.Border}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="TabStripPlacement" Value="Left"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TabControl}">
<Grid x:Name="templateRoot" ClipToBounds="true" SnapsToDevicePixels="true" KeyboardNavigation.TabNavigation="Local">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Border BorderBrush="#DDD" BorderThickness="0,0,1,0"/>
<TabPanel x:Name="headerPanel" Background="Transparent" Grid.Column="0" IsItemsHost="true" Grid.Row="0" KeyboardNavigation.TabIndex="1" Panel.ZIndex="1"/>
<Border x:Name="contentPanel" Background="Transparent" KeyboardNavigation.DirectionalNavigation="Contained"
Grid.Column="1" KeyboardNavigation.TabNavigation="Local" KeyboardNavigation.TabIndex="2">
<ContentPresenter x:Name="PART_SelectedContentHost" ContentSource="SelectedContent" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="TabItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TabItem">
<Border BorderBrush="Transparent" BorderThickness="0,0,1,0" Name="back" Background="Transparent"
Height="40">
<TextBlock Text="{TemplateBinding Header}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="BorderBrush" Value="Orange" TargetName="back"/>
<Setter Property="Background" Value="white" TargetName="back"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>