WPF文本框的工具包前景没有改变

时间:2015-12-30 07:47:46

标签: wpf

我创建了一个自定义文本框,其中包含属性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>

通过上面的代码一切正常,但问题是工具提示不在&#34; Red&#34;颜色。 :( 有人可以建议吗?

我尝试了另一种方法,前景现在是&#34; Red&#34;,但我需要有关如何使用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>

2 个答案:

答案 0 :(得分:0)

在DataTrigger中,&#34; Text&#34;用于为工具提示设置前景的TextBlock属性会覆盖工具提示的文本值,这就是您无法查看说明的原因。所以绑定&#34; Text&#34;使用SelfPropertyInfo.RuleDescription的属性。

答案 1 :(得分: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>