gpt4 book ai didi

c# - 在绑定(bind)到集合的控件内处理元素

转载 作者:太空宇宙 更新时间:2023-11-03 13:21:33 25 4
gpt4 key购买 nike

我有一个 ObservableCollection<string>绑定(bind)到 ItemsControl其模板只是一个Button .这个按钮的内容是 2 TextBlock .我正在尝试使用 PreviewMouseRightButtonUp按钮事件来切换其中一个文本 block 的可见性,但无法为模板中的元素使用 xaml 名称,我碰壁了。有没有办法通过 sender 访问按钮的内容元素?在该预览事件中,或以其他方式执行此操作?这与 previous question 有关我没有得到一个可用的答案(可能是由于我的解释,因此这个简化的例子)。在我看来,应该发生的事情是我应该制作一个基于关闭按钮的控件,为这个切换添加一个属性,但这基本上是我认为我在上一个问题中没有工作的.我觉得属性和触发器是大多数人会说的正确方法?

xaml:

<ItemsControl x:Name="iC" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button PreviewMouseRightButtonUp="Button_PreviewMouseRightButtonUp">
<DockPanel>
<TextBlock Text="normal" DockPanel.Dock="Top"/>
<TextBlock Text="{Binding}" DockPanel.Dock="Top" Visibility="Collapsed"/>
</DockPanel>
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>

代码隐藏:

ObservableCollection<string> x = new ObservableCollection<string>();
public MainWindow()
{
x.Add("1");
x.Add("2");
InitializeComponent();
iC.ItemsSource = x;
}

最佳答案

如果您将隐藏的文本 block 命名为“secondTextBlock”,那么这应该有效:

private void Button_PreviewMouseRightButtonUp(object sender, MouseButtonEventArgs e)
{
DockPanel dockPanel = (DockPanel)((Button)sender).Content;
TextBlock text = (TextBlock)LogicalTreeHelper.FindLogicalNode(dockPanel, "secondTextBlock");
if (text != null)
{
text.Visibility = Visibility.Visible;
}
}

关于您的以下评论:是的,将创建“secondTextBlock”的多个实例。请参阅下面的 Snoop 屏幕截图。但是这些多个实例是可以的;它们没有任何负面影响。

screen shot

关于c# - 在绑定(bind)到集合的控件内处理元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23940989/

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