我遇到了 ToolbarItem
的问题和 IsEnabled
尝试使用触发器从 XAML 打开/关闭它时的属性。 ToolbarItem
不支持触发器,所以我要做的是创建一个 Button
(一个隐藏的)支持触发器然后绑定(bind)Button.IsEnabled
至ToolbarItem.IsEnabled
;这是示例代码:
<ContentPage.ToolbarItems>
<ToolbarItem x:Name="tlbSave" Text="Save" Clicked="Handle_Clicked">
<ToolbarItem.IsEnabled>
<Binding Source="{x:Reference btnTest}" Path="IsEnabled" />
</ToolbarItem.IsEnabled>
</ToolbarItem>
</ContentPage.ToolbarItems>
<ContentPage.Content>
<StackLayout Padding="10" VerticalOptions="CenterAndExpand">
<Entry x:Name="txtTest" HorizontalOptions="FillAndExpand" />
<Button x:Name="btnTest" Text="HIDDEN" IsEnabled="false" HorizontalOptions="FillAndExpand">
<Button.Triggers>
<MultiTrigger TargetType="Button">
<MultiTrigger.Conditions>
<BindingCondition Binding="{Binding Source={x:Reference txtTest}, Path=Text.Length,
Converter={convert:IsPositiveIntegerConverter}}" Value="true" />
</MultiTrigger.Conditions>
<Setter Property="IsEnabled" Value="True" />
</MultiTrigger>
</Button.Triggers>
</Button>
</StackLayout>
</ContentPage.Content>
如果您尝试这段代码,您将看到
btnTest
在 txtTest.Text
时启用/禁用有一定的值(value)。但它不影响 tlbSave.IsEnabled
属性(property)。但是,当我设置
tlbSave.IsEnabled
时,这项工作在代码后面很完美。进入 btnText.PropertyChanged
事件处理程序 btnTest.IsVisible
是 假 ,我只是为了测试目的而展示它。关于如何处理这个问题的任何想法?
最佳答案
这是因为 ToolbarItem 的 IsEnabled 属性是 只读 .
如果您只是将 XAML 中工具栏项的 IsEnabled 属性设置为 false 或 true,您将在运行时收到以下异常。
System.InvalidOperationException: The BindableProperty "IsEnabled" is readonly.
如果你看看 Microsoft's documentation ,您会注意到您不能直接设置工具栏项的 IsEnabled 属性。
要禁用工具栏项,建议的方法是使用命令,它是 CanExecute。
关于xamarin.forms - Xamarin Forms ToolbarItem 不会从 XAML 更改 IsEnabled,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55089092/