WPF - 在自定义样式中定义窗口图标

时间:2016-10-12 14:55:43

标签: c# wpf xaml icons styles

我在使用Window图标时遇到了麻烦。

我已为项目内的.xaml文件中包含的Style创建了自己的Windows。我想要做的是在Icon的左下角显示系统Window。通常,直接在Window上工作我可以设置IconIcon属性中指定它。但它不起作用,因为Window使用我自己的Style,其中未定义图标。所以我尝试在我的样式中为Setter属性添加Icon

<Style x:Key="KavoWindowStyle" TargetType="{x:Type Window}">
    <Setter Property="WindowChrome.WindowChrome">
        <Setter.Value>
            <WindowChrome CaptionHeight="30"
                          GlassFrameThickness="0"
                          CornerRadius="0"
                          NonClientFrameEdges="None"
                          ResizeBorderThickness="5"
                          UseAeroCaptionButtons="False"/>
        </Setter.Value>
    </Setter>
    <Setter Property="Icon" Value="MyIcon.ico"/>      <==================
    <Setter Property="BorderBrush" Value="#2ECC71"/>
    <Setter Property="Background" Value="#646464"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Window}">
                <Grid>
                    <Border Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="1">
                        <AdornerDecorator>
                            <ContentPresenter/>
                        </AdornerDecorator>
                    </Border>

                    <DockPanel Height="30"
                               VerticalAlignment="Top"
                               LastChildFill="False">
                        <TextBlock VerticalAlignment="Center"
                                   DockPanel.Dock="Left"
                                   Margin="5,0,0,0"
                                   FontSize="14"
                                   Foreground="#E8E8E8"
                                   Text="{TemplateBinding Title}"
                                   FontFamily="Open Sans Regular"/>

                    </DockPanel>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

但它没有用(我运行程序时遇到异常)。我不知道这是否是正确的方法,如果没有,我想知道什么是正确的方法。提前谢谢!

1 个答案:

答案 0 :(得分:2)

您必须将图标放在自定义标题栏中的某个位置。

例如,您可以在Image左侧放置TextBlock

<DockPanel Height="30"
        VerticalAlignment="Top"
        LastChildFill="False">
    <Image Source="{TemplateBinding Icon}" />
    <TextBlock VerticalAlignment="Center"
        DockPanel.Dock="Left"
        Margin="5,0,0,0"
        FontSize="14"
        Foreground="#E8E8E8"
        Text="{TemplateBinding Title}"
        FontFamily="Open Sans Regular"/>    
</DockPanel>

现在应该显示出来。请根据您的需要调整尺寸和布局。