我正在为我的文本输入创建基本样式,这些将有一个占位符。我正在尝试绑定Text.IsEmpty
属性,但它不存在。所以我尝试了以下]]
<Setter.Value> <ControlTemplate TargetType="{x:Type TextBox}"> <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" CornerRadius="{TemplateBinding Border.CornerRadius}"> <Grid> <TextBlock x:Name="Placeholder" Visibility="Visible" Text="{TemplateBinding Tag}"></TextBlock> <ScrollViewer Background="Transparent" Margin="0" x:Name="PART_ContentHost"/> </Grid> </Border> <ControlTemplate.Triggers> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding ElementName=PART_ContentHost,Path=IsFocused}" Value="False" /> <Condition Binding="{Binding ElementName=PART_ContentHost, Path=Text.IsEmpty}" Value="True" /> </MultiDataTrigger.Conditions> <Setter TargetName="Placeholder" Property="Visibility" Value="Collapsed"/> </MultiDataTrigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value>
为简单起见,在这里,我将只为我尝试过的所有其他内容编写多重触发。
<MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding RelativeSource={x:Static RelativeSource.Self},Path=IsFocused}" Value="False" /> <Condition Binding="{Binding RelativeSource={x:Static RelativeSource.Self},Path=Text.IsEmpty}" Value="True" /> </MultiDataTrigger.Conditions> <Setter TargetName="Placeholder" Property="Visibility" Value="Collapsed"/> </MultiDataTrigger>
两者都不起作用,我对使用
RelativeSource
不太了解,所以也许我使用了错误的source属性?谁能建议我根据自己的条件应遵守的条件。应该没有文本,空格算作没有文本。
或者如果输入集中,则占位符消失。
我正在为我的文本输入创建基本样式,这些将有一个占位符。我正在尝试绑定Text.IsEmpty属性,但它不存在。因此,我尝试了以下
我看到的第一个问题是您的逻辑被翻转了。您的触发器说,如果控件未聚焦并且文本为空,则隐藏占位符。 (我认为那不是您想要的)
我看到的第二个问题是您正在控件模板中使用数据触发器。在控制模板中,由于您可以直接访问所有元素,因此只能使用常规触发器。