WPF передает ActualWidth и ActualHeight дочернего элемента управления в преобразователь значений - PullRequest
0 голосов
/ 03 марта 2019

Используя WPF, я хочу создать изображение для каждого набора данных в коллекции и отобразить изображения, сложенные вертикально.Все изображения должны иметь одинаковую высоту (и ширину).Изображения, собранные вместе, должны составлять высоту содержащего элемента.Изображения ни в коем случае не должны растягиваться.

Неработающий пример того, что мне нужно, выглядит следующим образом.

<UniformGrid Columns="1" DataContext="{Binding DataSetCollection}">
    <UniformGrid.Children>
        <MultiBinding Converter="{StaticResource DataSetToImageConverter}">
            <Binding />
            <Binding Path="ActualWidth" RelativeSource="{RelativeSource AncestorType={x:Type UniformGridRow}}" />
            <Binding Path="ActualHeight" RelativeSource="{RelativeSource AncestorType={x:Type UniformGridRow}}" />
        </MultiBinding>
    </UniformGrid.Children>
</UniformGrid>

Это не работает дляряд причин, но, надеюсь, сообщает намерение.Основные требования:

  • Все дочерние элементы должны быть одинакового роста
  • Растяжение не допускается
  • Каждое изображение создается динамически на основе доступной для него области
  • Изображения перерисовываются при изменении размера содержащего элемента
  • Преобразователь значений, используемый для правильного возврата изображений, получает ширину и высоту содержащей строки

Не изменяетНе нужно использовать UniformGrid, это может быть что угодно, однако он должен использовать привязку данных и конвертер для каждого дочернего элемента.

1 Ответ

0 голосов
/ 03 марта 2019

Это помогло, привязав к размеру содержащегося ContentPresenter.

<ItemsControl ItemsSource="{Binding DataSetCollection}" ItemTemplate="{StaticResource WriteableBitmapDataTemplate}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <UniformGrid Columns="1" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>

Используя этот шаблон данных

<DataTemplate x:Key="WriteableBitmapDataTemplate">
    <Image>
        <Image.Source>
            <MultiBinding Converter="{StaticResource RangeToWritableBitmapConverter}">
                <Binding />
                <Binding Path="ActualWidth" RelativeSource="{RelativeSource AncestorType={x:Type ContentPresenter}}" />
                <Binding Path="ActualHeight" RelativeSource="{RelativeSource AncestorType={x:Type ContentPresenter}}" />
            </MultiBinding>
        </Image.Source>
    </Image>
</DataTemplate>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...