gpt4 book ai didi

c# - 重新设计 WPF 扩展工具包的 ChildWindow

转载 作者:行者123 更新时间:2023-11-30 23:11:13 26 4
gpt4 key购买 nike

我有一个模态对话框,我正在使用 WPF 扩展工具包的 ChildWindow 显示,但我不喜欢窗口的默认外观,因为它不正确支持系统颜色(它有一个强制白色背景)并且在使用时不适应 Windows Classic Shell。 Default ChildWindow dialog style因此,我试图为 ChildWindow 创建我自己的样式,但在这样做时我已经破坏了控件的对话框行为 - 我将如何设置它的样式以恢复此行为?

Custom-Styled ChildWindow

我的对话框样式如下。

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:wpfToolkit="http://schemas.xceed.com/wpf/xaml/toolkit">
<Style TargetType="wpfToolkit:ChildWindow">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="wpfToolkit:ChildWindow">
<!--<Window WindowState="{TemplateBinding WindowState}" Visibility="{TemplateBinding Visibility}" Background="{TemplateBinding Background}" Foreground="{TemplateBinding Foreground}">-->
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Border Grid.RowSpan="2"
BorderThickness="2"
BorderBrush="Gold"/>
<Rectangle>
<Rectangle.Fill>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<LinearGradientBrush.GradientStops>
<GradientStop Color="Lime"/>
<GradientStop Color="DarkGreen"/>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
<TextBlock Foreground="White" Text="{TemplateBinding Caption}"/>
<ContentPresenter Grid.Row="1"/>
</Grid>
<!--</Window>-->
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>

我曾尝试将它嵌套在一个窗口中以恢复对话框行为,但我却收到运行时异常“窗口必须是树的根。无法将窗口添加为 Visual 的子项。”。我的风格需要什么?

最佳答案

从默认样式开始,然后根据您的需要对其进行自定义:

enter image description here

XAML:

<Window x:Class="WpfApp27.MainWindow"
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:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
xmlns:local="clr-namespace:WpfApp27"
mc:Ignorable="d"
Title="MainWindow" Height="300" Width="300">

<Window.Resources>
<LinearGradientBrush x:Key="LinearGradientBrushStyle1" StartPoint="0,0" EndPoint="1,1">
<LinearGradientBrush.GradientStops>
<GradientStop Color="Lime"/>
<GradientStop Color="DarkGreen" Offset="0.5"/>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>

<Style x:Key="ChildWindowStyle1" TargetType="{x:Type xctk:ChildWindow}">
<Setter Property="Background" Value="Navy"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="WindowBackground" Value="{StaticResource LinearGradientBrushStyle1}"/>
<Setter Property="MinWidth" Value="120"/>
<Setter Property="MinHeight" Value="45"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type xctk:ChildWindow}">
<Grid x:Name="PART_Root">
<Grid.Resources>
<Style x:Key="FocusVisualStyle" TargetType="{x:Type Control}">
<Setter Property="BorderBrush" Value="Black"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Margin" Value="-1"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Rectangle Fill="{TemplateBinding Background}" Margin="{TemplateBinding Margin}" Stroke="{TemplateBinding BorderBrush}" StrokeThickness="0.5" StrokeDashArray="4 3">
<Rectangle.RenderTransform>
<TranslateTransform X="{Binding Left}" Y="{Binding Top}"/>
</Rectangle.RenderTransform>
</Rectangle>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</Grid.Resources>
<Grid x:Name="PART_WindowRoot" HorizontalAlignment="Left" Height="{TemplateBinding Height}" MinWidth="{TemplateBinding MinWidth}" MinHeight="{TemplateBinding MinHeight}" VerticalAlignment="Top" Width="{TemplateBinding Width}">
<xctk:WindowControl x:Name="PART_WindowControl" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" CloseButtonVisibility="{TemplateBinding CloseButtonVisibility}" CaptionForeground="{TemplateBinding CaptionForeground}" ContentTemplate="{TemplateBinding ContentTemplate}" CaptionFontSize="{TemplateBinding CaptionFontSize}" Caption="{TemplateBinding Caption}" Content="{TemplateBinding Content}" CaptionShadowBrush="{TemplateBinding CaptionShadowBrush}" CloseButtonStyle="{TemplateBinding CloseButtonStyle}" CaptionIcon="{TemplateBinding CaptionIcon}" Height="{TemplateBinding Height}" IsActive="{TemplateBinding IsActive}" WindowStyle="{TemplateBinding WindowStyle}" WindowBackground="{TemplateBinding WindowBackground}" WindowOpacity="{TemplateBinding WindowOpacity}" WindowInactiveBackground="{TemplateBinding WindowInactiveBackground}" WindowBorderBrush="{TemplateBinding WindowBorderBrush}" Width="{TemplateBinding Width}" WindowBorderThickness="{TemplateBinding WindowBorderThickness}"/>
</Grid>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="WindowState" Value="Closed">
<Setter Property="Visibility" Value="Collapsed"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.BasedOn>
<Style TargetType="{x:Type xctk:WindowControl}">
<Setter Property="CloseButtonStyle">
<Setter.Value>
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="Blue"/>
<Setter Property="OverridesDefaultStyle" Value="True"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="border" BorderThickness="0" Background="{TemplateBinding Background}" Padding="1">
<ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding IsActive, RelativeSource={RelativeSource TemplatedParent}}" Value="False">
<Setter Property="Background" Value="#FFBCBCBC"/>
</DataTrigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="SkyBlue"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="#FF993D3D"/>
</Trigger>
</Style.Triggers>
</Style>
</Setter.Value>
</Setter>
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Background" Value="White"/>
<Setter Property="CaptionFontSize" Value="15"/>
<Setter Property="CaptionForeground" Value="white"/>
<Setter Property="CaptionShadowBrush" Value="Transparent"/>
<Setter Property="WindowBorderBrush" Value="Gold"/>
<Setter Property="WindowBackground" Value="#FF0078D7"/>
<Setter Property="WindowBorderThickness" Value="5"/>
<Setter Property="WindowInactiveBackground" Value="#FFEBEBEB"/>
<Setter Property="IsTabStop" Value="False"/>
<Setter Property="KeyboardNavigation.TabNavigation" Value="None"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate/>
</Setter.Value>
</Setter>
</Style>
</Style.BasedOn>
</Style>
</Window.Resources>

<Grid>
<xctk:WindowContainer Grid.Row="0">
<xctk:ChildWindow Grid.Row="0" Width="200" Height="150" Caption="Child Window" IsModal="True" WindowState="Open" Style="{DynamicResource ChildWindowStyle1}">
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock>My Child Window</TextBlock>
<Button Width="75" Height="25">CHILD</Button>
</StackPanel>
</xctk:ChildWindow>
</xctk:WindowContainer>
</Grid>

关于c# - 重新设计 WPF 扩展工具包的 ChildWindow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44851453/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com