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

这是通过以下方式实现的:
<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’时,创建一个新的堆栈面板。
我能够创建用于标签的下列内容:
<!-- 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>我可以简单地将样式添加到标签中,如下所示:
<Label Content="First Text" Style="{StaticResource LabelToolTipStyle}" ToolTip="Label with LabelToolTipStyle" />然后,我试图通过创建一个针对ContentControl的样式来使其更一般化,但显然无法工作,因为这覆盖了整个模板(对于CheckBox控件,复选框丢失了):
<!-- 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执行此操作,我不会反对为每个控件类型创建单独的样式,但希望避免重新定义整个模板。
发布于 2015-02-16 15:01:47
你快到了。您需要为ContentControl创建自定义控件模板。
<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中,并应用以下样式:
<ContentControl Style="{StaticResource ToolTipWrapper}" ToolTip="Hello world">
<CheckBox Content="I am a check box" />
</ContentControl>您不能做的是自动将自定义样式应用于所有"content“控件:始终需要以这种方式包装在每个元素周围的额外ContentControl。
https://stackoverflow.com/questions/28543390
复制相似问题