WPF如何设置工具提示到文本框(在样式文件中)

时间:2010-08-21 10:47:24

标签: wpf textbox tooltip styles

我想为ToolTip提供良好的TextBox,所以我从简单的ToolTip开始:

   <TextBox>
       <TextBox.ToolTip>
           <StackPanel>
               <TextBlock>Nice text</TextBlock>
               <TextBlock>Nice text</TextBlock>
           </StackPanel>
       </TextBox.ToolTip>
   </TextBox>

但是我有十几个TextBox es,我希望他们都拥有上面的ToolTip。这就是我决定将上面的代码转移到Style文件中的原因。

我的Style文件如下:

   <Style x:Key="DefaultStyle" TargetType="{x:Type TextBox}">
    <Setter Property="FontFamily" Value="Tahoma"/>
    <Setter Property="FontSize" Value="15"/>
    <Setter Property="VerticalContentAlignment" Value="Center"/>
    <Setter Property="TextAlignment" Value="Center"/>
    <Setter Property="TextWrapping" Value="Wrap"/>
    <Setter Property="BorderBrush" Value="#A9C2DE"/>
    <Setter Property="BorderThickness" Value="1"/>
    <Setter Property="Background">
        <Setter.Value>
            <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1" >
                <GradientStop Color="#CDE1F7" Offset="0.01"/>
                <GradientStop Color="#DFECFA" Offset="0.8" />
            </LinearGradientBrush>
        </Setter.Value>
    </Setter>
    <Setter Property="ToolTip">
        <Setter.Value>
            <StackPanel>
                <TextBlock Text="Nice toolbox"/>
                <TextBlock Text="Nice tooltip"/>
            </StackPanel>
        </Setter.Value>
    </Setter>
</Style>

但是现在我得到错误XAML解析异常。

如何将这种ToolTip(带StackPanel s等)设置为TextBox(来自样式文件)??

1 个答案:

答案 0 :(得分:3)

Dotnet版本&lt; 4

样式看起来很好但是在样式值中直接指定工具提示似乎存在问题。将ToolTip声明为资源,然后通过StaticResource将其设置为样式。

<ToolTip x:Key="YourToolTip" >        
    <StackPanel>
        <TextBlock Text="Nice toolbox"/>
        <TextBlock Text="Nice tooltip"/>
    </StackPanel>
</ToolTip>

... Your Style...
<Setter Property="TextBox.ToolTip" Value="{StaticResource YourToolTip}"/>
...

Dotnet版本== 4

如果您使用.net4,那就是其他内容。你写道,你把它放在一个样式文件中。你的意思是资源文件?如果是,可能是您在运行时未加载它。类似的东西:

<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/YourStyleFile.xaml"/>
            <ResourceDictionary>
                 <!-- Other local resources -->
            </ResourceDictionary>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>

另一种可能性是您尝试在TextBox之外的其他类型上使用它。这不起作用,因为您将TextBox声明为目标类型。