0

オブジェクトのコレクションを表示する ListView があります。ListViewItem をクリックしたときに「青い効果」または「青い四角形」を無効にし、このアイテム内のオブジェクトのみを有効にしたい。誰かがそれについて考えを持っていますか??

これが私の ListViewItems の 1 つの例です。

LisViewItem

ここに私のリストビューがあります:

<ListView SelectionMode="Single" IsManipulationEnabled="True" HorizontalAlignment="Left" HorizontalContentAlignment="Stretch" VerticalAlignment="Stretch" ScrollViewer.VerticalScrollBarVisibility="Auto" ItemsSource="{Binding ChildrenList}" Background="Transparent" BorderBrush="Transparent" >
        <ListView.LayoutTransform>
            <RotateTransform Angle="{Binding IsVertical, Converter={StaticResource AngleOfBool}}"></RotateTransform>
        </ListView.LayoutTransform>
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid HorizontalAlignment="Stretch" Background="Transparent" >
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto"></ColumnDefinition>
                        <ColumnDefinition></ColumnDefinition>
                    </Grid.ColumnDefinitions>
                    <CheckBox   Content="{Binding Id}"  Height="auto" Name="Flag" HorizontalAlignment="Left" VerticalAlignment="Top" Grid.Column="0" IsChecked="{Binding IsVisible}"/>
                    <Grid Grid.Column="1">
                        <area:Area HorizontalAlignment="Stretch" Visibility="{Binding IsVisible, Converter={StaticResource VisibilityOfBool}}" />
                    </Grid>
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
</ListView>
4

2 に答える 2

2

IsEnabled親コントロールのプロパティを に設定すると、すべての子コントロールFalseのプロパティも自動的に に設定されます。これを回避する唯一の方法は、親コントロールのプロパティではなく、無効にしたい個々のコントロールのプロパティをに設定することです。IsEnabledFalseIsEnabledFalse

ただし、関連するすべてのコントロールのプロパティに対して 1 つのboolプロパティを作成して、少なくとも 1 つのプロパティを使用してすべてのコントロールを無効および有効にすることができます。BindIsEnabled

<Grid Name="Parent">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="auto"></ColumnDefinition>
        <ColumnDefinition Width="auto"></ColumnDefinition>
    </Grid.ColumnDefinitions>
    <ContentControl IsEnabled="AreInnerControlsEnabled" Grid.Column="0" Content="{Binding}" Visibility="{Binding IsVisible, Converter= {StaticResource VisibilityOfBool} }"></ContentControl>
    <Grid Grid.Column="1" Visibility="{Binding IsVisible, Converter= {StaticResource VisibilityOfBool} }" HorizontalAlignment="Stretch">
        <Grid.RowDefinitions>
            <RowDefinition Height="0.5*"></RowDefinition>
            <RowDefinition Height="0.5*"></RowDefinition>
        </Grid.RowDefinitions>
        <Label IsEnabled="AreInnerControlsEnabled" Grid.Row="0" Background="Transparent" Content="{Binding Top}" VerticalAlignment="Top" HorizontalAlignment="Stretch"></Label>
        <Label Grid.Row="1" Background="Transparent" Content="{Binding Bottom}" VerticalAlignment="Bottom" HorizontalAlignment="Stretch"></Label>
    </Grid>
</Grid>

このメソッドを使用すると、AreInnerControlsEnabledプロパティを使用するコントロールのみが影響を受けます。

更新 >>>

したがって、実際には...のデフォルトの選択色を削除したいことがわかりましたListView。これは、あなたが求めている「ように見えた」ものとは大きく異なります。ただし、単純な を使用することで非常に簡単に実現できることがわかりましたStyle

<Style x:Key="HiddenDefaultSelectionStyle" TargetType="{x:Type ListViewItem
    <Style.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Black" />
    </Style.Resources>
</Style>

その色を隠すために必要なのはこれらのうちの 1 つだけですが、後で参照できるように残りを示しました。次のように使用できます。

<ListView ItemContainerStyle="{StaticResource HiddenDefaultSelectionStyle}" ... />
于 2013-10-07T10:23:36.720 に答える