c# - 使单个方法适用于多个 WPF 元素
问题描述
我制作了一个单击事件/方法来改变文本框的不透明度和 IsEnabled 属性。
private void EditButton(object sender, RoutedEventArgs e)
{
religionTB.IsEnabled = true;
DoubleAnimation fade = new
DoubleAnimation(1,TimeSpan.FromSeconds(0.2));
religionTB.BeginAnimation(OpacityProperty, fade);
}
在我的 WPF 项目中,有多个文本框,我想将此方法应用于所有这些文本框,而不必在方法中列出所有文本框。我怎么会这样?
解决方案
您可以通过使用Style
. 为此,请转到事件处理程序(Control
或Window
)的上下文并添加一个DependencyProperty
, 以标记启用模式并将一个ToggleButton
(编辑按钮)绑定到它,该属性设置此属性以启用/禁用控件并触发淡入并淡出动画:
在您的控制下:
public static readonly DependencyProperty IsEditEnabledProperty = DependencyProperty.Register(
"IsEditEnabled",
typeof(bool),
typeof(MainWindow),
new PropertyMetadata(default(bool)));
public bool IsEditEnabled { get { return (bool) GetValue(MainWindow.IsEditEnabledProperty); } set { SetValue(MainWindow.IsEditEnabledProperty, value); } }
在您的 XAML 中添加TextBox
样式并将 a 链接ToggleButton
到IsEditEnabled
:
<Window.Resources>
<Style x:Key="OpacityStyle" TargetType="TextBox">
<Setter Property="Opacity" Value="0" />
<Setter Property="IsEnabled"
Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Window}, Path=IsEditEnabled}" />
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Window}, Path=IsEditEnabled}"
Value="True">
<! Fade in animation -->
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity"
BeginTime="0:0:0"
From="0"
To="1"
Duration="0:0:0.2" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<! Fade out animation -->
<DataTrigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity"
BeginTime="0:0:0"
From="1"
To="0"
Duration="0:0:0.2" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.ExitActions>
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<StackPanel>
<ToggleButton x:Name="EditButton" IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Window}, Path=IsEditEnabled, Mode=TwoWay}" />
<TextBox x:Name="AnimatedTextBox" Style="{StaticResource TextBoxAnimationStyle}" >
<TextBox x:Name="AnotherAnimatedTextBox" Style="{StaticResource TextBoxAnimationStyle}" >
<TextBox x:Name="NonanimatedTextBox" >
</StackPanel>
</Grid>
如果您Style
通过删除x:Key
属性来隐式化,它将适用TextBox
于范围内的所有元素
推荐阅读
- css - 避免重叠的 CSS 网格元素
- postgresql - PostgresSQL - 分析 cpe23Uri
- powershell - 使用参数从 Powershell 执行 Angular 服务失败
- javascript - gulp iconfonts的问题,我错过了什么?
- c# - IIS 中的 Blazor 服务器端下载问题
- mapbox - GPS 精度太高,地理定位点(蓝点)在 IOS 14 版本中的更新之一后在 IOS-Safari 中跳来跳去?
- python - 在 Python 中使用 groupby 计算加权平均值
- sql - 如何使用 DB2 sql 代码动态地将列转置为表的行,其中列可能会随着时间的推移而增加且无需更改代码?
- javascript - 我们的 await 关键字在 for await of 循环中的行为与普通异步函数中的行为有何不同?
- flutter - FireStore 数据库中的空值......屏幕上总是有这个 CircularProgressIndicator