0

ビューがGridViewに設定されているWPFListViewがあります。リストの行が無効になることがありますが、常に有効にするには1列のセルが必要です。[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プロパティの伝播を無視して、有効のままにしておきたいコントロールを拡張することができます。もう少し説明のあるこの例については、CedricDussudの投稿を参照してください。

この場合、コードは次のようになります。

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 に答える