Свойство привязки к количеству столбцов родительской сетки - PullRequest
0 голосов
/ 22 мая 2018

У меня есть стиль Rectangle, который я использую для выделения строк Grid при наведении на них курсора мыши.

Я бы хотел связать свойство Grid.ColumnSpan Rectangle до родительского Grid количество столбцов.Есть идеи, как это сделать?Является ли привязка к родительскому элементу Grid и использование конвертера для возврата количества столбцов лучшим вариантом?

Вот пример того, что я пытаюсь сделать:

enter image description here

XAML:

<Window x:Class="WpfApplication5.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApplication5"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <Style x:Key="MouseOverHighlightStyle" TargetType="Rectangle">
            <Setter Property="Fill" Value="Red" />
            <Setter Property="Opacity" Value="0" />
            <Setter Property="Grid.Column" Value="0" />
            <Setter Property="Grid.ColumnSpan" Value="4" />
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Opacity" Value="0.3" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>
    <Grid ShowGridLines="True">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Rectangle Grid.Row="0" Style="{StaticResource MouseOverHighlightStyle}" />
        <Rectangle Grid.Row="1" Style="{StaticResource MouseOverHighlightStyle}" />
        <Rectangle Grid.Row="2" Style="{StaticResource MouseOverHighlightStyle}" />
        <Rectangle Grid.Row="3" Style="{StaticResource MouseOverHighlightStyle}" />
    </Grid>
</Window>

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Он не совсем отвечает на ваш вопрос, но вы можете просто установить Span на что-то действительно большое, чтобы ваш прямоугольник всегда охватывал весь регион, независимо от количества столбцов.Что-то вроде:

<Setter Property="Grid.ColumnSpan" Value="2147483647" /> <!-- int.MavValue -->
0 голосов
/ 22 мая 2018

Измените свой Window.Resources на это:

<Window.Resources>
    <Style x:Key="MouseOverHighlightStyle" TargetType="Rectangle">
        <Setter Property="Fill" Value="Red" />
        <Setter Property="Opacity" Value="0" />
        <Setter Property="Grid.Column" Value="0" />
        <Setter Property="Grid.ColumnSpan" Value="{Binding Path=ColumnDefinitions.Count, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Grid}}}" />
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Opacity" Value="0.3" />
            </Trigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

Там вы получаете свой родительский (Grid в этом примере) ColumnDefinition.Count и установите его в columnSpan вашего Rectangle.Я только что попробовал и он работает, так что дайте мне знать, если он работает и для вас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...