wpf 如何使用内联表达式绑定IsEnabled?

5uzkadbs  于 2023-01-21  发布在  其他
关注(0)|答案(2)|浏览(191)

假设我有

<TextBox
    x:Name="txtBox1" />

<!-- more XAML here -->

<TextBox
   x:Name="associatedToTextBox1"
   IsEnabled={Binding ElementName=txtBox1, Path=Text, Magic=txtBox.Text != string.Empty} />

我希望associatedToTextBox1只有在txtBox1不为空时才被启用。我认为有一种方法可以将该功能嵌入到xaml中,而不需要转换器。这可能吗?如果可以,怎么做?

tzdcorbm

tzdcorbm1#

没有什么比“内联表达式”更好的了。
但是,您可以在TextBox样式中使用DataTrigger:

<TextBox x:Name="associatedToTextBox1">
    <TextBox.Style>
        <Style TargetType="TextBox">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Text, ElementName=txtBox1}"
                             Value="">
                    <Setter Property="IsEnabled" Value="False"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>
</TextBox>
cld4siwp

cld4siwp2#

我最近一直在尝试实现这样的东西。取得了一些进展和成功的罗斯林分析仪,但不满意。需要一些更简单,更容易使用。
最终创建了一个标记扩展,它完全按照你在问题中提到的那样做。目前,nuget还在测试阶段。很快就会发布。你可以查看haley.mvvm(版本6.3.1及以上...)
块体:https://www.nuget.org/packages/Haley.MVVM/6.3.0
源代码:https://github.com/TheHaleyProject/HaleyMVVM/blob/development/HaleyMVVM/Extensions/DataTriggerExtension.cs
这可能不是一个干净的解决方案。很多工作需要在未来做,但目前有了这个你可以实现,像下面的东西。

<Button x:Name="btnMain" Background="yellow" Height="50" Content="Click Me" />
    <TextBlock FontSize="24" Background="WhiteSmoke" TextAlignment="Center" Margin="10"
        Text="{hm:Trigger Path=IsMouseOver,Value=True,OnSuccess='Hovered Over Self', FallBack='hello world'}"
        Foreground="{hm:DataTrigger Path={Binding ElementName=btnMain,Path=Background},Value='#FF008000',OnSuccess='darkred',FallBack='green'}">

相关问题