0

我有一个 WPF ListView,其视图设置为 GridView。列表中的行有时会被禁用,但我需要始终启用一列单元格。我们在“URL”列中显示了一个链接,即使该行被禁用,用户也需要能够单击该链接。目前,如果该行被禁用,则链接也被禁用。

我目前在 XAML 中有这个:

        <ListView.View>
            <GridView>



                <GridViewColumn Header="Name">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock
                                Text="{Binding Item.Name}"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>

                <GridViewColumn Header="Description">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock
                                Text="{Binding Item.Description}"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Header="URL">                       
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                         <Label>
                                <Hyperlink 
                                    Command="{Binding ViewModel.OpenInstructionsCommand}">
                                    <TextBlock Text="View"  />
                                </Hyperlink>
                            </Label>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>

            </GridView>
        </ListView.View>
4

1 回答 1

3

虽然不能保证对所有控件类型都没有副作用,但可以扩展您希望保持启用状态的控件以忽略从父控件传播的 IsEnabled 属性。有关更多解释的示例,请参阅Cedric Dussud 在此处的帖子

在这种情况下,您的代码可能如下所示:

internal class EnabledHyperlink : Hyperlink
{
    static EnabledHyperlink()
    {
        IsEnabledProperty.OverrideMetadata(typeof (EnabledHyperlink),
            new UIPropertyMetadata(true,
                IsEnabledPropertyChanged,
                CoerceIsEnabled));
    }

    private static void IsEnabledPropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs args)
    {
    }

    private static object CoerceIsEnabled(DependencyObject source, object value)
    {
        return value;
    }
}
于 2012-10-11T17:08:21.070 回答