繁体   English   中英

如何在WPF的“非客户端”窗口区域中访问自定义控件?

[英]How to access the custom control in window 'non-client' area in WPF?

我要实现自定义窗口,如下所示: 自定义窗口标题 使用此窗口样式自定义窗口时,我不知道如何通过窗口“非客户”区域中的名称访问“ CheckBox”(圆圈中的双箭头)。

请给点建议吗?

WPF窗口概述

<Style x:Key="MetroWindowStyle" TargetType="{x:Type Window}">
        <!--<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"/>-->
        <!--<Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>-->
        <Setter Property="Background" Value="Transparent"></Setter>
        <Setter Property="WindowStyle" Value="None" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Window}">
                    <Grid>
                        <Border x:Name="MainBorder" BorderThickness="0">
                            <Border.Background>
                                <ImageBrush ImageSource="Resources/default_background.jpg" Opacity="0.9"/>
                            </Border.Background>
                            <DockPanel LastChildFill="True">
                                <Border x:Name="PART_TITLEBAR" 
                                        Margin="0,0,0,0" Height="40" DockPanel.Dock="Top"  
                                        Background="Transparent" MouseLeftButtonDown="PART_TITLEBAR_MouseLeftButtonDown">
                                    <DockPanel LastChildFill="False">
                                        <TextBlock Margin="4,0,0,4" VerticalAlignment="Center" 
                                                   Foreground="White" TextWrapping="NoWrap" 
                                                   Text="{TemplateBinding Title}" FontSize="16" />
                                        <Button x:Name="PART_CLOSE" DockPanel.Dock="Right" 
                                                VerticalAlignment="Center" Margin="5"
                                                Height="20" Width="20" 
                                                Style="{DynamicResource MetroWindowButtonStyle}"
                                                Click="PART_CLOSE_Click">
                                            <Path Data="F1M54.0573,47.8776L38.1771,31.9974 54.0547,16.1198C55.7604,14.4141 55.7604,11.6511 54.0573,9.94531 52.3516,8.23962 49.5859,8.23962 47.8802,9.94531L32.0026,25.8229 16.1224,9.94531C14.4167,8.23962 11.6511,8.23962 9.94794,9.94531 8.24219,11.6511 8.24219,14.4141 9.94794,16.1198L25.8255,32 9.94794,47.8776C8.24219,49.5834 8.24219,52.3477 9.94794,54.0534 11.6511,55.7572 14.4167,55.7585 16.1224,54.0534L32.0026,38.1745 47.8802,54.0534C49.5859,55.7585 52.3516,55.7572 54.0573,54.0534 55.7604,52.3477 55.763,49.5834 54.0573,47.8776z" 
                                                  Stretch="Uniform" Fill="#FFAAAAAA" Width="10" Margin="0,0,0,0" ></Path>
                                        </Button>
                                        <Button x:Name="PART_MAXIMIZE_RESTORE" 
                                                DockPanel.Dock="Right" Margin="5"
                                                HorizontalAlignment="Center" VerticalAlignment="Center" 
                                                Height="20" Width="20" Style="{DynamicResource MetroWindowButtonStyle}"
                                                Click="PART_MAXIMIZE_RESTORE_Click">
                                            <Path Data="M4.3685131,23.127279L4.3685131,47.283243 47.117023,47.283243 47.117023,23.127279z M0,10.684L53.755001,10.684 53.755001,51.668001 0,51.668001z M8.5679998,0L58.668022,0 64,0 64,5.6864691 64,45.317999 58.668022,45.317999 58.668022,5.6864691 8.5679998,5.6864691z"
                                                  Stretch="Uniform" Fill="#FFAAAAAA" Width="10" Margin="0,0,0,0" ></Path>
                                        </Button>
                                        <Button x:Name="PART_MINIMIZE" 
                                                HorizontalAlignment="Center" 
                                                VerticalAlignment="Center" Margin="5"
                                                DockPanel.Dock="Right"
                                                Height="20" Width="20" Style="{DynamicResource MetroWindowButtonStyle}"
                                                Click="PART_MINIMIZE_Click" VerticalContentAlignment="Bottom">
                                            <Button.Content>
                                                <Path Data="M0,20L53.333,20 53.333,8.888 0,8.888z" 
                                                      Stretch="Uniform" Fill="#FFAAAAAA" Width="10" Margin="0,0,0,5"></Path>
                                            </Button.Content>
                                        </Button>
                                        <CheckBox Template="{StaticResource ResourceKey=collapsCheckBox}"  x:Name="MyCheckBox"
                                                  Height="30" Width="30"
                                                  Foreground="White" 
                                                  VerticalContentAlignment="Bottom"
                                                  DockPanel.Dock="Right" Margin="3 6 3 10"
                                                Click="ButtonBase_OnClick"/>
                                    </DockPanel>
                                </Border>

                                <AdornerDecorator DockPanel.Dock="Bottom">
                                    <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" 
                                                      Content="{TemplateBinding Content}"
                                                      ContentStringFormat="{TemplateBinding ContentStringFormat}"/>
                                </AdornerDecorator>
                            </DockPanel>
                        </Border>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="ResizeMode" Value="CanResizeWithGrip">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type Window}">
                            <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}">
                                <Grid>
                                    <AdornerDecorator>
                                        <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}"/>
                                    </AdornerDecorator>
                                    <ResizeGrip x:Name="WindowResizeGrip" HorizontalAlignment="Right" IsTabStop="False" Visibility="Collapsed" VerticalAlignment="Bottom"/>
                                </Grid>
                            </Border>
                            <ControlTemplate.Triggers>
                                <MultiTrigger>
                                    <MultiTrigger.Conditions>
                                        <Condition Property="ResizeMode" Value="CanResizeWithGrip"/>
                                        <Condition Property="WindowState" Value="Normal"/>
                                    </MultiTrigger.Conditions>
                                    <Setter Property="Visibility" TargetName="WindowResizeGrip" Value="Visible"/>
                                </MultiTrigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
    <Style x:Key="MetroWindowButtonStyle" TargetType="{x:Type Button}">
        <Setter Property="FocusVisualStyle">
            <Setter.Value>
                <Style>
                    <Setter Property="Control.Template">
                        <Setter.Value>
                            <ControlTemplate>
                                <Rectangle Margin="2" SnapsToDevicePixels="True" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeThickness="1" StrokeDashArray="1 2"/>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </Setter.Value>
        </Setter>
        <Setter Property="Background" Value="{x:Null}"/>
        <Setter Property="BorderBrush" Value="#FF707070"/>
        <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
        <Setter Property="BorderThickness" Value="0"/>
        <Setter Property="HorizontalContentAlignment" Value="Center"/>
        <Setter Property="VerticalContentAlignment" Value="Center"/>
        <Setter Property="Padding" Value="1"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
                        <ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsDefaulted" Value="True">
                            <Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                        </Trigger>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Background" TargetName="border" Value="#FFBEE6FD"/>
                            <Setter Property="BorderBrush" TargetName="border" Value="#FF3C7FB1"/>
                        </Trigger>
                        <Trigger Property="IsPressed" Value="True">
                            <Setter Property="Background" TargetName="border" Value="#FFC4E5F6"/>
                            <Setter Property="BorderBrush" TargetName="border" Value="#FF2C628B"/>
                        </Trigger>
                        <Trigger Property="IsEnabled" Value="False">
                            <Setter Property="Background" TargetName="border" Value="#FFF4F4F4"/>
                            <Setter Property="BorderBrush" TargetName="border" Value="#FFADB2B5"/>
                            <Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="#FF838383"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

在模板的复选框中添加命令绑定,如下所示:

Template =“ {StaticResource ResourceKey = collapsCheckBox}” x:Name =“ MyCheckBox” Height =“ 30” Width =“ 30” Foreground =“ White” VerticalContentAlignment =“ Bottom” DockPanel.Dock =“ Right” Margin =“ 3 6 3 10“ Command =” myapp:YourCommandClasd.GetCommandInstance“>

并在xaml中声明:

    <CommandBinding

        Command="myapp:YourCommandClass.GetCommandInstance"   Executed="To_Be_Executed" />

</Window.CommandBindings>

您可以在xaml.cs文件中声明“ To_Be_Executed”方法,该方法将被触发。

应该在xaml代码中将myapp声明为名称空间。

YourCommandClass.GetCommandInstance:可以是返回RoutedUICommand对象的属性。

对不起,我在手机上写了代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM