【问题标题】:WPF textbox's toolip foreground not changingWPF文本框工具提示前景没有改变
【发布时间】:2015-12-30 07:47:46
【问题描述】:

我创建了一个自定义文本框,其中包含一个属性 SelfPropertyInfo。这又有一些我们使用的其他属性(如 IsValid、Description 等)。我正在尝试在文本框上添加样式,以便如果 IsValid 为 false 它应该显示一个工具提示(其中包含描述)。

 <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>

通过上面的代码,一切正常,但问题是工具提示不是“红色”。 :( 有人可以推荐吗?

我尝试了另一种方法,前景现在是“红色”,但我需要有关如何将描述与提示文本绑定的帮助。请查看 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>

【问题讨论】:

  • DataContext of ToolTip 应该与 TextBox 相同。您是否尝试过在 CustomControls:TextBox.ToolTip 中使用的相同绑定 TextBlock.Text
  • 感谢您的评论。是的,我试过了,但工具提示文本仍然是空白的。看看我做了什么:

标签: wpf


【解决方案1】:

在DataTrigger中,用于设置工具提示前景的TextBlock的“文本”属性覆盖了工具提示的文本值,这就是你看不到描述的原因。因此,将“Text”属性与 SelfPropertyInfo.RuleDescription 绑定。

【讨论】:

  • 请在我的问题中查看最近添加的代码,我尝试了您所说的,但它使工具提示空白。
  • 你能调试一下吗,那个触发器被触发了,SelfPropertyInfo.RuleDescription 中有什么值。你可以简单地使用一个虚拟转换器来做到这一点。
【解决方案2】:

我尝试使用普通属性,它对我来说效果很好

        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>

【讨论】:

  • 感谢您的帮助。但它不会帮助我。您已经在文本框中明确添加了样式,但是我的要求是创建 TargetType=CustomControls:TextBox 的可重用样式。
猜你喜欢
  • 2011-07-20
  • 2011-01-08
  • 1970-01-01
  • 2012-07-17
  • 2021-02-04
  • 2012-06-06
  • 2018-08-08
  • 2013-01-29
  • 2014-05-19
相关资源
最近更新 更多