WPF模板绑定超过1个内容

时间:2015-02-09 15:26:40

标签: c# wpf xaml

所以,我有这个窗口。在它上面,我将成对创建一个TextBlocks和TextBoxes列表。当您单击其中任何一个时,它们会在相应的TextBox中放置一个数字,并在后台设置一些值。这一切都很好。

我有以下XAML来创建自定义复选框(因为它具有我想要使用的行为)。我的问题是我想将不同的内容绑定到TextBlock和TextBox中。对于TextBlock,我绑定到Content属性,但我找不到合适的选项来满足第二个绑定。我考虑将它放在标签中,但这感觉不对,无论如何,我已经将我需要的索引值绑定到那里。

<Style x:Key="CustomCHK" TargetType="{x:Type CheckBox}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type CheckBox}">
                    <DockPanel LastChildFill="True">
                        <TextBox DockPanel.Dock="Right" Width="50" Height="30" />
                        <TextBlock Text="{TemplateBinding Content}" TextWrapping="Wrap" />
                    </DockPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

感觉应该有一个简单的解决方案,但我只是想确定什么是最好的。我是否创建了一个自定义复选框类,只添加了几个属性?

与往常一样,我很欣赏你能为我提供的任何方向。

1 个答案:

答案 0 :(得分:0)

不幸的是,没有直接的方法可以做到这一点。我只能看到两个(有点缺陷)的解决方法:

  • 子类CheckBox以满足您的需求,并添加您需要的其他内容属性。优点是,这将完全启用IDE的编程帮助来设置内容属性,这些属性将是类型安全的。缺点是您需要添加C#代码,其唯一目的是声明其他内容属性(即不添加任何&#34;行为逻辑&#34;),这似乎与&#34; clean&#冲突34; XAML - 仅用于演示方法。
  • 您可以尝试将数组传递给Content property,然后在控件模板中放置几个​​ContentPresenter实例,每个实例都绑定到数组中的另一个项目。 Binding property paths should support indexed access,虽然您的代码可能会变得有点冗长,因为XAML中的数组必须使用x:Array markup extension明确写入。