XAML 代码中的函数调用?
Posted
技术标签:
【中文标题】XAML 代码中的函数调用?【英文标题】:Function call within XAML code? 【发布时间】:2011-03-03 18:32:50 【问题描述】:我想在我的所有 TextBox 控件上设置一个样式,当它接收到键盘焦点时会执行以下操作:
1) 更改背景颜色 2) 调用 .SelectAll() 以突出显示所有文本
到目前为止我有这个:
<Style TargetType="TextBox">
<Style.Triggers>
<Trigger Property="IsKeyboardFocusWithin" Value="True">
<Setter Property="Background">
<Setter.Value>
<SolidColorBrush Color="#FFFFD1D9"/>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
有没有办法也可以调用 .SelectAll()
?谢谢。
【问题讨论】:
【参考方案1】:您可以使用附加的行为来做到这一点。
示例
public static class TextBoxBehaviour
public static bool GetSelectAll(TextBoxBase target)
return (bool)target.GetValue(SelectAllAttachedProperty);
public static void SetSelectAll(TextBoxBase target, bool value)
target.SetValue(SelectAllAttachedProperty, value);
public static readonly DependencyProperty SelectAllAttachedProperty = DependencyProperty.RegisterAttached("SelectAll", typeof(bool), typeof(TextBoxBehaviour), new UIPropertyMetadata(false, OnSelectAllAttachedPropertyChanged));
static void OnSelectAllAttachedPropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
((TextBoxBase)o).SelectAll();
用法
<Style TargetType="x:Type TextBox" xmlns:behaviours="clr-namespace:Controls.Behaviours">
<Style.Triggers>
<Trigger Property="IsKeyboardFocusWithin" Value="True">
<Setter Property="Background" Value="#FFFFD1D9"/>
<Setter Property="behaviours:TextBoxBehaviour.SelectAll" Value="True"/>
</Trigger>
</Style.Triggers>
</Style>
参考文献
Josh Smith on Attached Behaviours注意:无法测试上述实现,但理论上它应该可以正常工作™。
HTH,
【讨论】:
+1 很好的答案。几乎和我写的一样。就个人而言,我会将方法的主体更改为简单的((TextBoxBase)target).SelectAll()
,以便在错误使用该属性时抛出一个可理解的异常。从 QA 的角度来看,从长远来看,这比默默地忽略此类错误要好:您可以提前发现错误,而不是让它们潜伏多年。
@Ray Burns:我同意。这是一个我正在努力改掉的坏习惯。我已经编辑了我的答案。
谢谢你——它工作得很好。仅供参考,对于希望为 PasswordBox 实现此功能的任何人:实现一个单独的 PasswordBoxBehaviour 类并将所有出现的 TextBoxBase 替换为 PasswordBox。以上是关于XAML 代码中的函数调用?的主要内容,如果未能解决你的问题,请参考以下文章
C#中如何实现WPF调用Winform中用户自定义的控件呢?
在Xamarin Forms Project中的OnAppearing方法中调用InitializeComponent