2015-12-30 70 views
1

我已经创建了一个具有属性SelfPropertyInfo的自定义文本框。这也有一些我们使用的其他属性(如IsValid,Description等)。我试图在文本框中添加样式,以便如果IsValid为false,它应该显示一个工具提示(其中包含Description)。WPF文本框的toolip前景不变

<Style TargetType="{x:Type ToolTip}">    
    <Setter Property = "Foreground" Value=" Red "/>    
</Style>  

<Style TargetType="{x:Type CustomControls:TextBox}"> 
      <Setter Property="Height" Value="22"/> 
      <Setter Property="Margin" Value="2,2,2,2"/> 
      <Style.Triggers> 
       <Trigger Property="IsEnabled" Value="False"> 
        <Setter Property="Background" Value="DarkGray" /> 
       </Trigger> 
       <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=SelfPropertyInfo.IsValid}" Value="False"> 
        <Setter Property="BorderBrush" Value="Red"/> 
        <Setter Property="BorderThickness" Value="1"/> 
        <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=SelfPropertyInfo.RuleDescription}" > 
        </Setter> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 

通过上面的代码,一切工作正常,但问题是,工具提示不是在“红色”的颜色。 ?:( 任何人都可以提出

我尝试另一种方法,现在的前景是“红楼梦”,但我需要帮助有关如何绑定tootip的文字说明,请参阅内部DataTrigger的变化,:

<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=SelfPropertyInfo.IsValid}" Value="False"> 
      <Setter Property="BorderBrush" Value="Red"/> 
      <Setter Property="BorderThickness" Value="1"/> 
      <Setter Property="ToolTip"> 
       <Setter.Value> 
         <ToolTip > 
          <TextBlock Foreground="Red" Text="Hello"/> 
         </ToolTip> 
       </Setter.Value> 
      </Setter> 
</DataTrigger> 

预先感谢任何帮助

我也试过下面的代码,但它使提示空白:

<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=SelfPropertyInfo.IsValid}" Value="False"> 
        <Setter Property="BorderBrush" Value="Red"/> 
        <Setter Property="BorderThickness" Value="1"/> 
        <Setter Property="ToolTip"> 
         <Setter.Value> 
          <ToolTip > 
           <TextBlock Foreground="Red" Text="{Binding RelativeSource={RelativeSource Self}, Path=SelfPropertyInfo.RuleDescription}"/> 
          </ToolTip> 
         </Setter.Value> 
        </Setter> 

+0

'ToolTip'的'DataContext'应该是一样的'TextBox'。您是否尝试过在'TextBlock.Text'的'CustomControls:TextBox.ToolTip'中使用的绑定? – dkozl

+0

感谢您的评论。是的,我试过,但工具提示文本仍然是空白.. 看我的diid:

回答

0

在DataTrigger中,用于为工具提示设置Foreground的TextBlock的“Text”属性覆盖工具提示的文本值,这就是为什么您无法看到描述。所以用SelfPropertyInfo.RuleDescription绑定“Text”属性。

+0

我认为这将工作,请试试:) –

+0

请参阅我的问题中最近添加的代码,我试着你说的,但它使工具提示空白。 –

+0

您可以调试它,触发器被触发,并且SelfPropertyInfo.RuleDescription中有什么值。你可以简单地使用一个虚拟转换器来做到这一点。 –

0

我尝试了用普通财产它工作得很好我

 private string testString;  
     public string TestString 
     { 
      get { return testString; } 
      set 
      { 
       testString = value; 
       RaisePropertyChanged("TestString"); 
      } 
     } 

    <TextBox Height="100" Text="{Binding TestString}"> 
       <TextBox.Style> 
        <Style TargetType="{x:Type TextBox}"> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding TestString}" Value="False"> 
           <Setter Property="BorderBrush" Value="Red"/> 
           <Setter Property="BorderThickness" Value="1"/> 
           <Setter Property="ToolTip"> 
            <Setter.Value> 
             <ToolTip > 
              <TextBlock Foreground="Red" Text="{Binding TestString}"/> 
             </ToolTip> 
            </Setter.Value> 
           </Setter> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </TextBox.Style> 
      </TextBox> 
+0

感谢您的帮助。但它不会帮助我。您已经明确地在文本框中添加了样式,但是我的要求是创建TargetType = CustomControls:TextBox的可重用样式。 –