窗体管理对象

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>


2021-09-04 WPF上位机通用框架平台实战-设备编辑相关推荐

  1. Python上位机软件图形界面实战——PyQt

    转载:https://blog.csdn.net/qq_25939803/article/details/97894219 文章目录 引言 1 环境配置 2 新建一个软件窗口 3 QtDesigner ...

  2. Qt 零基础设计实现TCP服务器和客户端上位机(零基础实战详解,附源码文件)

    文章目录 TCP和UDP TCP的三次握手和四次分手 TCP和UDP的区别 关于Socket(套接字) Qt TCP服务器的设计与实现 使用Qt的 帮助 TCP服务器和客户端 区别 UI界面设计和原则 ...

  3. 【愚公系列】2023年07月 WPF+上位机+工业互联 002-WPF布局控件

    文章目录 前言 一.WPF布局控件 1.无边框设计 2.理解布局 2.1 WPF的布局处理 2.1 布局原则 2.3 布局过程 3.布局控件 3.1 Grid控件 3.1.1 属性 3.1.2 案例 ...

  4. 2021-11-18 WPF上位机 87-串口通信和网口通讯

    串口通信和网口通讯 通信双方(应用) ->设备):利用什么进行通信(硬件) ->RS485(对绞线 两根线)串口通信 ->RJ45(网线)网口通讯 C#提供的两个对象: RS485- ...

  5. 2021-11-21 WPF上位机 94-Modbus通信数据交换问题

    通信数据交换问题 1.RTU:3.5个字符时间,报文的发送间隔 2.RTU请求频率(两帧报文之间有5ms以上的时间) 3.大小端问题(字节序),不固定 ABCD CDAB DCBA BADC floa ...

  6. 2021-11-22 WPF上位机 94-Modbus通信数据交换问题

    通信数据交换问题 1.RTU:3.5个字符时间,报文的发送间隔 2.RTU请求频率(两帧报文之间有5ms以上的时间) 3.大小端问题(字节序),不固定 ABCD CDAB DCBA BADC floa ...

  7. 【愚公系列】2023年07月 WPF+上位机+工业互联 015-属性绑定(源更新触发器)

    文章目录 前言 一.源更新触发器 1.DataContext数据源 1.1 DataContext代码绑定 1.2 DataContext界面绑定 1.3 自定义集合遍历 3.源更新触发器 前言 WP ...

  8. 2021-12-03 WPF上位机 109-欧姆龙协议

    欧姆龙PLC存储区 A:是模拟通道 D:数据区 D10->两个字节(Modbus->两个字节(一个字) 需要是的什么类型的数据 short->一个寄存器,float->两个寄 ...

  9. 2021-12-01 WPF上位机 103-西门子S7协议之V区,DB区读数据方法流程解析

    文章目录 前言 一.西门子S7协议之V区,DB区读数据方法流程解析 二.使用步骤 1.读取数据 总结 前言 随着人工智能的不断发展,物联网这门技术也越来越重要,很多人都开启了物联网学习,本文就介绍了物 ...

最新文章

  1. PHP验证邮箱地址代码
  2. 西安python培训班多少钱-西安python培训多少钱?
  3. VM虚拟机下安装CentOS_6.5_x64
  4. 最简单实现多线程的方法(Thread)
  5. 停止对互联网的意淫吧,它不过是个信息技术啊
  6. Python中的strip()函数的用法
  7. mariaDB数据库存放路径修改配置问题
  8. 802.11相关术语及其设计(二)
  9. CE6870 添加ipv6 策略路由失败问题解决
  10. VS中javascript注释快捷键
  11. python中的ln函数_python中的对数log函数表示及用法
  12. 豆瓣上评分最高的9本必读书
  13. 阮一峰:值得分享给开发者的 Authing 身份云
  14. proxy 状态代码503_HTTP状态503错误代码及其解决方法?
  15. Redis - Expire Setex
  16. 无线连接安卓手机进行app自动化
  17. 2022年3000元电脑最强组装 组装电脑配置推荐3000元左右
  18. python xgb模型 预测_如何使用XGBoost模型进行时间序列预测
  19. 根据百度地图进行IP定位获取地址
  20. python读取csv数据画直方图_python 中直方图绘制

热门文章

  1. 关于数据库触发器(trigger)的简单使用操作
  2. Flaash大气纠正 ENVI
  3. 去除Win10锁屏时Google的Chrome锁屏界面弹出的视频/音频 控制
  4. 配置docker 代理,连接外部网络并下载docker镜像
  5. 基于网球体育数据的MapReduce实现案例
  6. 在有赞做java有发展吗_有赞响应式架构与 RxJava 实践
  7. Element组件引发的Vue中mixins使用,写出高复用组件
  8. 火鸟Firebird数据库的中文参考资料
  9. 用scoop代替chocolatey做Windows包管理器
  10. 数据库课程设计——图书管理管理系统(一)