gpt4 book ai didi

.net - 从父控件设置 WPF 嵌套控件属性

转载 作者:行者123 更新时间:2023-12-04 23:34:16 25 4
gpt4 key购买 nike

我有一个 WPF 窗口,上面有多个 ListBox 控件,它们都共享我在这里简化的相同样式:

   <Style x:Key="listBox" TargetType="{x:Type ListBox}">
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
<Border BorderBrush="Black">
<StackPanel Orientation="Horizontal" >
<TextBlock Text="{Binding Path=name}" />
<TextBlock Text="{Binding Path=text}" />
<TextBlock Text="id:" />
<TextBlock x:Name="_idTextBlock" Text="{Binding Path=id}" />
<Button Name="btnGet" CommandParameter="{Binding Path=id}" />
</StackPanel>
</Border>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>

下面是一个使用该样式的 ListBox 控件的示例:
<ListBox x:Name="lbCampaigns" Button.Click="lbCampaigns_Click" ItemsSource="{Binding}" Style="{StaticResource listBox}" />

如何从父 ListBox 中设置 Button 控件 (btnGet) 的内容?

我知道我希望按钮在设计时为 Window 上的每个 ListBox 显示什么文本。 (即我不需要将它绑定(bind)到 ListBox ItemsSource)。我看到我可以定义子控件的事件(请参阅 Button.Click 定义),但似乎不能以相同的方式设置子控件的属性。

有任何想法吗?
谢谢!

最佳答案

您的 Button.Click 设置没有将事件处理程序分配给 Button。将其分配给 ListBox .它的工作原理是 WPF 的路由事件系统。

如果你想要 Button采用设置在 ListBox 级别的值,在这种情况下,一种选择是使用 BindingRelativeSource :

<Button Content="{Binding Tag, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}}"/>

在这种情况下,我刚刚劫持了 Tag属性,您可以按如下方式指定:
<ListBox Tag="This is the button's content" .../>

另一种选择是使用继承的附加属性。例如:
<Button Content="{Binding local:MyClass.MyAttachedProperty}"/>

进而:
<ListBox local:MyClass.MyAttachedProperty="This is the button's content"/>

最后,如果您正在模板 ListBox本身,您可以使用 TemplateBinding“伸出”并绑定(bind)到您正在模板化的控件的属性。 :
<Button Content="{TemplateBinding Tag}"/>

当然,这种技术通常与模板化控件上特别声明的属性一起使用。例如,您可以继承 ListBox并添加您自己的 ButtonContent属性(property)。然后,在您的模板中,您可以从 Button 联系并绑定(bind)到该属性。 .

关于.net - 从父控件设置 WPF 嵌套控件属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/683666/

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