首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF:造型ContentControl

WPF:造型ContentControl
EN

Stack Overflow用户
提问于 2015-02-16 14:15:34
回答 1查看 6.1K关注 0票数 1

我想要创建一个可以应用于任何ContentControl的样式,它将接受ToolTip并向ContentControl添加一个图像,并将工具提示文本从对象应用到图像中。我有大约100个这样的,需要做(在各种项目),所以能够创建一个风格将节省大量的打字。

我试图重新创建的是(ToolTip文本位于蓝色的“I”,而不是“Reload Employee Data”):

这是通过以下方式实现的:

代码语言:javascript
复制
<StackPanel Orientation="Horizontal">
    <CheckBox Content="Reload Employee Data"
              IsChecked="{Binding AdjustmentSettings.ReloadEmployeeData}" 
              Grid.Row="0"
              Grid.Column="0">
    </CheckBox>
    <Image Source="/DelphiaLibrary;Component/Resources/info.ico" 
           ToolTip="Check if you want to re-upload ..."/>
</StackPanel>

我想避免的是,每次我想在'i‘而不是在对象的文本上添加带有工具提示文本的蓝色'i’时,创建一个新的堆栈面板。

我能够创建用于标签的下列内容:

代码语言:javascript
复制
    <!-- Works for just Label -->
    <Style x:Key="LabelToolTipStyle"
           TargetType="{x:Type Label}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Label">
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{TemplateBinding Content}" />
                        <Image Source="info.ico" ToolTip="{TemplateBinding ToolTip}"/>
                    </StackPanel>

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

我可以简单地将样式添加到标签中,如下所示:

代码语言:javascript
复制
<Label Content="First Text" Style="{StaticResource LabelToolTipStyle}" ToolTip="Label with LabelToolTipStyle" />

然后,我试图通过创建一个针对ContentControl的样式来使其更一般化,但显然无法工作,因为这覆盖了整个模板(对于CheckBox控件,复选框丢失了):

代码语言:javascript
复制
    <!-- Works on Label but not CheckBox -->
    <Style x:Key="ContentToolTipStyle"
           TargetType="{x:Type ContentControl}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ContentControl">
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{TemplateBinding Content}" />
                        <Image Source="info.ico" ToolTip="{TemplateBinding ToolTip}"/>
                    </StackPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

有没有一种方法可以为ContentControls创建一个样式,允许我在不重新定义整个模板的情况下添加到模板中?如果不能对ContentControl执行此操作,我不会反对为每个控件类型创建单独的样式,但希望避免重新定义整个模板。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-16 15:01:47

你快到了。您需要为ContentControl创建自定义控件模板。

代码语言:javascript
复制
<Style x:Key="ToolTipWrapper" TargetType="{x:Type ContentControl}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ContentControl}">
                <StackPanel Orientation="Horizontal">
                    <StackPanel.ToolTip>
                        <ToolTip Visibility="Hidden" />
                    </StackPanel.ToolTip>
                    <ContentPresenter />
                    <Image Source="info.ico" ToolTip="{TemplateBinding ToolTip}" />
                </StackPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

然后将元素包装在一个ContentControl中,并应用以下样式:

代码语言:javascript
复制
<ContentControl Style="{StaticResource ToolTipWrapper}" ToolTip="Hello world">
    <CheckBox Content="I am a check box" />
</ContentControl>

您不能做的是自动将自定义样式应用于所有"content“控件:始终需要以这种方式包装在每个元素周围的额外ContentControl

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28543390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档