我有一个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>
答案 0 :(得分:3)
虽然不能保证所有控件类型都没有副作用,但可以扩展要保持启用的控件,以忽略来自父控件的IsEnabled属性的传播。有关此示例,请参阅Cedric Dussud's post here。
在这种情况下,您的代码可能如下所示:
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;
}
}