TextBoxStyle {WPF}上的工具提示样式

时间:2010-12-11 17:00:05

标签: wpf styles

我尝试在textboxstyle上应用工具提示样式在用户控件中。我的风格是:

<UserControl.Resources>

 <!--Style definition-->

</UserControl.Resources>

ToolTipStyle:

<Style x:Key="ToolTipStyle" TargetType="{x:Type ToolTip}">
    <Setter Property="Width" Value="200"/>
    <Setter Property="Height" Value="100"/>           
</Style>

TextBoxStyle:

    <Style x:Key="textBoxStyle" TargetType="{x:Type TextBox}">
        <Setter Property="Width" Value="200"/>
        <Setter Property="Height" Value="25"/>
        <Setter Property="FontSize" Value="13"/>
        <Setter Property="VerticalAlignment" Value="Center"/>

        <!--Apply toolip style-->
        <Setter Property="ToolTip.Style" Value="{StaticResource ToolTipStyle}"/>


        <Style.Triggers>
            <Trigger Property="Validation.HasError" Value="true">
                <Setter Property="ToolTip"
                        Value="{Binding RelativeSource={RelativeSource Self}, 
                        Path =(Validation.Errors)[0].ErrorContent}"/>
            </Trigger>
        </Style.Triggers>
    </Style>

TextBoxStyle适用于文本框constrol:

    <TextBox Name="tbNick" 
             Text="{Binding Nick, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"
             Style="{StaticResource textBoxStyle}"/>

我收到了这个编译错误:

  

{“不允许Style对象影响的Style属性   它适用的对象。“}

堆栈跟踪:

  

在System.Windows.Markup.XamlReader.RewrapException(例外e,   IXamlLineInfo lineInfo,Uri baseUri)at   System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader,   IXamlObjectWriterFactory writerFactory,Boolean   skipJournaledProperties,Object rootObject,XamlObjectWriterSettings   设置,Uri baseUri)at   System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader,   Boolean skipJournaledProperties,Object rootObject,XamlAccessLevel   accessLevel,Uri baseUri)at   System.Windows.Markup.XamlReader.LoadBaml(Stream stream,ParserContext   parserContext,Object parent,Boolean closeStream)at   System.Windows.Application.LoadComponent(Object component,Uri   resourceLocator)在Spirit.Views.ShellView.InitializeComponent()中   c:\ Users \ Jan \ Documents \ Visual Studio   2010 \项目\ C#\ Pokec__Messenger \ Spirit_MEF \查看\ ShellView.xaml:行   1在Spirit.Views.ShellView..ctor()中   C:\ Users \ Jan \ Documents \ Visual Studio   2010 \项目\ C#\ Pokec__Messenger \ Spirit_MEF \查看\ ShellView.xaml.cs:行   9

WPF中不允许在文本框样式上应用工具提示样式?我做错了什么?

同样在WPF中我使用caliburn.micro和MEF,但我认为它不会导致此错误。

2 个答案:

答案 0 :(得分:10)

没有ToolTip.Style这样的附加属性,编译器没有提供错误的信息描述。如果您希望TextBox使用隐式样式的自定义样式:

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
   <Page.Resources>
      <Style x:Key="textBoxStyle" TargetType="{x:Type TextBox}">
         <Style.Resources>
            <Style x:Key="{x:Type ToolTip}" TargetType="{x:Type ToolTip}">
               <Setter Property="Width" Value="200"/>
               <Setter Property="Height" Value="100"/>
            </Style>
         </Style.Resources>
         <Setter Property="Width" Value="200"/>
         <Setter Property="Height" Value="25"/>
         <Setter Property="FontSize" Value="13"/>
         <Setter Property="VerticalAlignment" Value="Center"/>
         <Style.Triggers>
            <Trigger Property="Validation.HasError" Value="true">
               <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"/>
            </Trigger>
         </Style.Triggers>
      </Style>
   </Page.Resources>
   <Grid>
      <TextBox Name="tbNick" Style="{StaticResource textBoxStyle}" Text="Test" ToolTip="Hey"/>
   </Grid>
</Page>

答案 1 :(得分:9)

不允许Style对象影响它应用的对象的Style属性。 您可能需要在此处查看http://windows-presentation-foundation.com/WPF_Triggers.aspx

检查此代码以设置工具提示样式

<Grid>

  <Grid.Resources>

    <Style x:Key="MyTooltip" TargetType="{x:Type ToolTip}">

      <Setter Property = "HorizontalOffset" Value="50"/>

      <Setter Property = "VerticalOffset" Value="50"/>

      <Setter Property = "Background" Value="Orange"/>

      <Setter Property = "Foreground" Value="Red"/>

      <Setter Property = "FontSize" Value="14"/>

      <Setter Property = "FontWeight" Value="Bold"/>

      <Setter Property = "FontFamily" Value="Courier New"/>

    </Style>

  </Grid.Resources>



  <TextBox Margin="10,10,10,10" Height="20">

    Pass over with your Mouse

    <TextBox.ToolTip>

      <ToolTip Style="{StaticResource MyTooltip}">

        <TextBlock>This is the Tooltip</TextBlock>

      </ToolTip>

    </TextBox.ToolTip>

  </TextBox>

</Grid>