如何在 ListView 的 GridViewColumn 中拥有可单击超链接的列表?

发布于 2024-10-26 06:13:28 字数 964 浏览 1 评论 0原文

我正在尝试将对象列表绑定到以逗号分隔且可单击的HyperLinks 列表。

如果每个单元格只有其中一个,我可以做到这一点,但我不知道如何为每个单元格绑定一个集合。

在单个 GridViewColumn 单元格中类似这样:

Effect01, Effect02, Effect02, Shader01. Shader02

单击其中任何一个都将调用绑定对象的 Execute 方法。

每个元素都是:

public class EffectLink : IExecutable
{
    public string Name {get; set;}
    public void Execute ();
}

IExecutable 强制执行。

我这样做是因为 Execute 的行为将取决于它是否是着色器、效果等。

有什么想法吗?

编辑:

我发现我可以这样做:

<TextBlock>
    <Hyperlink>Effect01</Hyperlink>
    <Hyperlink>Effect02</Hyperlink>
</TextBlock>

所以这在单个单元格中显示了 2 个空格分隔的超链接。

另外这个问题可能是相关的,但它显示了如何在代码中而不是xaml中执行此操作: 嵌套文本块和超链接, 如何在 C# 中复制此 XAML?

I am trying to bind a list of objects to a list of HyperLinks that are comma-separated, and clickable.

I can do it if it's only one of them per cell, but I don't know how to bind a collection per cell.

Something like this in a single GridViewColumn cell:

Effect01, Effect02, Effect02, Shader01. Shader02

where clicking any of them will call the binded object's Execute method.

Each element is:

public class EffectLink : IExecutable
{
    public string Name {get; set;}
    public void Execute ();
}

as enforced by IExecutable.

I do it this way because the behaviour of Execute will depend on whether it's a shader, an effect, etc.

Any ideas?

EDIT:

I found that I could do this:

<TextBlock>
    <Hyperlink>Effect01</Hyperlink>
    <Hyperlink>Effect02</Hyperlink>
</TextBlock>

So this shows 2 space-separate hyperlinks in a single cell.

Also this question might be related, but it shows how do it in code, not xaml:
Nested TextBlocks and Hyperlinks, How do you replicate this XAML in C#?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

め可乐爱微笑 2024-11-02 06:13:28

ItemsControl 放入 GridViewColumn.CellTemplate

    <GridViewColumn >
        <GridViewColumn.CellTemplate>
            <DataTemplate>
                <ItemsControl ItemsSource="{Binding}">
                    <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                            <StackPanel Orientation="Horizontal"/>
                        </ItemsPanelTemplate>
                    </ItemsControl.ItemsPanel>

                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <TextBlock x:Name="commaTextBlock" Text=", " />
                                <TextBlock><Hyperlink><Run Text="{Binding Path=Name}" /></Hyperlink></TextBlock>
                            </StackPanel>

                            <DataTemplate.Triggers>
                                <DataTrigger Binding="{Binding RelativeSource={RelativeSource PreviousData}}" Value="{x:Null}">
                                    <Setter Property="Visibility" TargetName="commaTextBlock" Value="Collapsed"/>
                                </DataTrigger>
                            </DataTemplate.Triggers>
                        </DataTemplate>

                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </DataTemplate>
        </GridViewColumn.CellTemplate>
    </GridViewColumn>

put an ItemsControl in your GridViewColumn.CellTemplate

    <GridViewColumn >
        <GridViewColumn.CellTemplate>
            <DataTemplate>
                <ItemsControl ItemsSource="{Binding}">
                    <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                            <StackPanel Orientation="Horizontal"/>
                        </ItemsPanelTemplate>
                    </ItemsControl.ItemsPanel>

                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <TextBlock x:Name="commaTextBlock" Text=", " />
                                <TextBlock><Hyperlink><Run Text="{Binding Path=Name}" /></Hyperlink></TextBlock>
                            </StackPanel>

                            <DataTemplate.Triggers>
                                <DataTrigger Binding="{Binding RelativeSource={RelativeSource PreviousData}}" Value="{x:Null}">
                                    <Setter Property="Visibility" TargetName="commaTextBlock" Value="Collapsed"/>
                                </DataTrigger>
                            </DataTemplate.Triggers>
                        </DataTemplate>

                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </DataTemplate>
        </GridViewColumn.CellTemplate>
    </GridViewColumn>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文