Ответы пользователя по тегу WPF
  • C# WPF Графика. Пересечение фигур. Как привести Polygon в Geometry?

    FoggyFinder
    @FoggyFinder
    По сути ваш вопрос содержит два отдельных вопроса:

    1. Как найти пересечение полигонов.
    2. Как преобразовать Polygon к Geometry.

    Отвечаю на второй:

    За определение сложных геометрических фигур отвечает класс PathFigure. Нужно определить начальную точку и последовательность сегментов (в нашем случае - LineSegment)

    var s1 = p1.Points.Skip(1).Select(p => new LineSegment { Point = p } );
    var g1 = new PathFigure(p1.Points.First(), s1, true);


    где p1 - первый полигон.

    Со вторым поступаем аналогично, ну а дальше вы уже знаете

    var path1 = new PathGeometry(new[] { g1 });
    var path2 = new PathGeometry(new[] { g2 });
    
    var path = new Path()
    {
        Data = new CombinedGeometry(GeometryCombineMode.Intersect, path1, path2),
        Fill = Brushes.Green
    };
    Ответ написан
    Комментировать
  • Как привязать данные разного типа к одному элементу управления и выводить в зависимости от определенного условия?

    FoggyFinder
    @FoggyFinder
    Возможно вам подойдут триггеры данных.

    Например, вы хотите отобразить сообщение о том, что нет данных для отображения, если коллекция числовых данных пуста:

    <ListBox ItemsSource="{Binding CurrentData}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding .}" />
            </DataTemplate>
        </ListBox.ItemTemplate>
        <ListBox.Style>
            <Style TargetType="ListBox">
                <Style.Triggers>
                    <Trigger Property="HasItems" Value="False">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate>
                                    <TextBlock
                                        Margin="5"
                                        HorizontalAlignment="Center"
                                        VerticalAlignment="Center"
                                        FontSize="16"
                                        Text="{Binding StringIfEmpty}" />
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </ListBox.Style>
    </ListBox>
    Ответ написан
    Комментировать