gpt4 book ai didi

wpf - 使用 WPF 样式来简化重复的 MultiBinding

转载 作者:行者123 更新时间:2023-12-04 05:57:50 26 4
gpt4 key购买 nike

我正在显示几个测试的结果。每个测试有 2 个变量,显示结果的文本和颜色随两者而异。我有这个工作,但是有很多重复的 MultiBinding 正在进行,我想看看是否有一种方法可以使用 Style 来简化 XAML。

这是我的代码的简化 View :

//TestResults.cs excerpt
public class TestResults
{
private Test1Result test1 = new Test1Result();
public Test1Result Test1 { get { return test1; } }

private Test2Result test2 = new Test2Result();
public Test2Result Test2 { get { return test2; } }
}

//TestCtrl.xaml.cs excerpt
public class TestCtrl : UserControl
{
private TestResults results = new TestResults();
public TestResults Results { get { return results; } }
}
<!-- TestCtrl.xaml excerpt -->
<UserControl x:Class="Tester.TestCtrl" x:Name="TestResultsCtrl" ...>

<!-- lots of stuff -->

<TextBlock Grid.Row="6">
<TextBlock.Text>
<MultiBinding Converter="{StaticResource TestToTextConverter}" >
<Binding Path="Results.Test1.Temperature" ElementName="TestResultsCtrl" />
<Binding Path="Results.Test1.Time" ElementName="TestResultsCtrl" />
</MultiBinding>
</TextBlock.Text>
<TextBlock.Foreground>
<MultiBinding Converter="{StaticResource TestToBrushConverter}">
<Binding Path="Results.Test1.Temperature" ElementName="TestResultsCtrl" />
<Binding Path="Results.Test1.Time" ElementName="TestResultsCtrl" />
</MultiBinding>
</TextBlock.Foreground>
</TextBlock>

<TextBlock Grid.Row="7">
<TextBlock.Text>
<MultiBinding Converter="{StaticResource TestToTextConverter}" >
<Binding Path="Results.Test2.Temperature" ElementName="TestResultsCtrl" />
<Binding Path="Results.Test2.Time" ElementName="TestResultsCtrl" />
</MultiBinding>
</TextBlock.Text>
<TextBlock.Foreground>
<MultiBinding Converter="{StaticResource TestToBrushConverter}">
<Binding Path="Results.Test2.Temperature" ElementName="TestResultsCtrl" />
<Binding Path="Results.Test2.Time" ElementName="TestResultsCtrl" />
</MultiBinding>
</TextBlock.Foreground>
</TextBlock>

<!-- lots more repetitions here -->

我想定义一个样式,以便我可以更轻松地将 MultiBindings 应用于 TextBlocks。每个测试的唯一区别是我在绑定(bind)路径值中指定了哪个测试。我的目标是这样的:
<Style x:Key="TestResultsStyle" TargetType="{x:Type TextBlock}">
<!-- do binding stuff here -->
</Style>

<TextBlock Grid.Row="6"
Style="{StaticResource TestResultsStyle}" <!--set Test1 path here --> />
<TextBlock Grid.Row="7"
Style="{StaticResource TestResultsStyle}" <!--set Test2 path here --> />

有没有类似的可能?

最佳答案

你可以这样做:

<Style x:Key="TestResultsStyle" TargetType="{x:Type TextBlock}">
<Setter Property="Text">
<Setter.Value>
<MultiBinding Converter="{StaticResource TestToTextConverter}" >
<Binding Path="Temperature" />
<Binding Path="Time" />
</MultiBinding>
</Setter.Value>
</Setter>
<!-- Same for Foreground -->
</Style>

<TextBlock Grid.Row="6"
DataContext="{Binding ElementName=TestResultsCtrl, Path=Results.Test1}"
Style="{StaticResource TestResultsStyle}" />
<TextBlock Grid.Row="7"
DataContext="{Binding ElementName=TestResultsCtrl, Path=Results.Test2}"
Style="{StaticResource TestResultsStyle}" />

在这里,您传入“Test”作为样式使用的默认绑定(bind)上下文。

关于wpf - 使用 WPF 样式来简化重复的 MultiBinding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6077906/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com