.net - 如何在代码中使用多重绑定重新创建 TextBlock 样式?
问题描述
这是我为TextBlock
WPF 应用程序提供的 XAML 代码。这与我当前的数据绑定工作得很好。
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="Black" FontSize="32" FontWeight="Bold">
<TextBlock.Style>
<Style TargetType="TextBlock" BasedOn="{StaticResource InvisibleTextBlock}">
<Style.Triggers>
<DataTrigger Binding="{Binding MatchModel.TeamARightEnd}" Value="True">
<Setter Property="Text">
<Setter.Value>
<MultiBinding StringFormat="{}{0} - {1}">
<Binding Path="TeamBScore"/>
<Binding Path="TeamAScore"/>
</MultiBinding>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding MatchModel.TeamARightEnd}" Value="False">
<Setter Property="Text">
<Setter.Value>
<MultiBinding StringFormat="{}{0} - {1}">
<Binding Path="TeamAScore"/>
<Binding Path="TeamBScore"/>
</MultiBinding>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
现在我需要动态创建几个这样的文本块并将它们添加到StackPanel
. 我成功地重新创建了它:
TextBlock scoretextblock = new()
{
Name = "TextBlockScore" + i,
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center,
Foreground = new SolidColorBrush(Colors.Black),
FontSize = 32,
FontWeight = FontWeights.Bold,
};
scoretextblock.Style = new()
{
TargetType = typeof(TextBlock),
Triggers =
{
new DataTrigger
{
Value = true,
Binding = new Binding("MatchModel.TeamARightEnd"),
Setters =
{
new Setter
{
Property = TextBlock.TextProperty,
Value = new Binding("TeamAScore") + " - " + new Binding("TeamBScore")
}
}
}
}
};
在执行过程中,我成功找到了上面TextBlock
的s,并且可以更改datacontext。但是,显示的所需结果为空白。有谁知道我做错了什么?或者有没有办法TextBlock
在 XAML 本身中动态地重新创建这些?
谢谢!!
解决方案
的应该设置为 a Value
,例如:Setter
MultiBinding
DataTrigger dataTrigger = new DataTrigger() { Value = true, Binding = new Binding("MatchModel.TeamARightEnd") };
MultiBinding multiBinding = new MultiBinding()
{
StringFormat = "{0} - {1}"
};
multiBinding.Bindings.Add(new Binding("TeamAScore"));
multiBinding.Bindings.Add(new Binding("TeamBScore"));
dataTrigger.Setters.Add(new Setter() { Property = TextBlock.TextProperty, Value = multiBinding });
Style style = new Style() { TargetType = typeof(TextBlock) };
style.Triggers.Add(dataTrigger);
TextBlock scoretextblock = new TextBlock()
{
Name = "TextBlockScore" + i,
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center,
Foreground = new SolidColorBrush(Colors.Black),
FontSize = 32,
FontWeight = FontWeights.Bold,
Style = Style
};
推荐阅读
- r - 使用另一列中的第一个值替换组的所有值
- javascript - 使用 makeStyles 更改按钮文本的颜色
- c# - 无法在 RawPrinterHelper 类 (ESC/POS) 中打开打印机
- javascript - 如何添加按钮以在 webview 中显示/隐藏图像
- java - Java 泛型转换和使用
- c# - 在 Azure Blob 容器中,如何按名称删除目录下的所有文件?
- jquery - 如何在 Chrome 扩展程序中打开页面并在其中运行 jQuery
- php - 更新 Laravel 中不可填写的字段?
- javascript - ES6对象数组上的indexOf如何在react中起作用但在repl中不起作用
- python - tf.keras.binary_crossentropy 给出的结果比调用 'binary_crossentropy' 更差