首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在WPF ItemsControl C#中获取项目值?

如何在WPF ItemsControl C#中获取项目值?
EN

Stack Overflow用户
提问于 2020-01-29 12:27:53
回答 1查看 414关注 0票数 0

单击ItemsControl项时,我希望从ItemsControl获取项值。

下面是我的示例代码:

代码语言:javascript
复制
 <ItemsControl x:Name="ListViewProducts" ItemsSource="{Binding Product}"  PreviewMouseLeftButtonUp="listView_Click" >
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <Border Margin="10" Width="110" Height="160">
                                    <StackPanel>
                                        <Border Width="100" Height="100" CornerRadius="5" Margin="5">
                                            <Border.Effect>
                                                <DropShadowEffect ShadowDepth="1"/>
                                            </Border.Effect>
                                            <Border.Background>
                                                <ImageBrush ImageSource="{Binding Image}" />
                                            </Border.Background>
                                        </Border>
                                        <!--<TextBlock Margin="5" Text="{Binding Value, StringFormat={}{0:C}}" FontSize="17" FontFamily="Franklin Gothic Medium"/>-->
                                        <TextBlock Margin="5 0" Text="{Binding Name}" FontSize="15"/>
                                    </StackPanel>
                                </Border>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                        <ItemsControl.ItemsPanel>
                            <ItemsPanelTemplate>
                                <WrapPanel/>
                            </ItemsPanelTemplate>
                        </ItemsControl.ItemsPanel>
                    </ItemsControl>

代码隐藏:

代码语言:javascript
复制
private void listView_Click(object sender, RoutedEventArgs e)
    {
        var item = (sender as ItemsControl);

        if (item != null)
        {

        }


    }

但是这不管用,我正在弄到物品的细节。请帮帮我。

我只需要使用Itemcontrol。当我使用listview时,它显示列表不是一种正确的方式,所以我使用itemscontrol。请看下面的图片。当我使用列表视图时,它会显示为一个框。请找到截图。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-29 14:07:52

您可以定义一个PreviewMouseLeftButtonUp并为容器处理PreviewMouseLeftButtonDown事件,而不是处理ItemsControlPreviewMouseLeftButtonDown事件。然后,您可以简单地将DataContextsender参数转换为您的类型:

代码语言:javascript
复制
private void ContentControl_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    var product = ((FrameworkElement)sender).DataContext as Product;
    ...
}

XAML:

代码语言:javascript
复制
<ItemsControl x:Name="ListViewProducts" ItemsSource="{Binding Product}" >
    <ItemsControl.ItemContainerStyle>
        <Style TargetType="ContentPresenter">
            <EventSetter Event="PreviewMouseLeftButtonDown" Handler="ContentControl_PreviewMouseLeftButtonDown" />
        </Style>
    </ItemsControl.ItemContainerStyle>
    <ItemsControl.ItemTemplate>
        ...
    </ItemsControl.ItemTemplate>
    <ItemsControl.ItemsPanel>
        ...
    </ItemsControl.ItemsPanel>
</ItemsControl>

或者为PreviewMouseLeftButtonDown处理ItemTemplate中的Border事件,并执行相同的操作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59967095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档