Вопрос

Есть ли способ масштабировать свойства XAML вместе с размером элементов, которым они принадлежат?

По сути, у меня есть шаблон элемента управления, который я создал слишком большим для его использования, главным образом потому, что я хочу использовать один и тот же элемент управления разных размеров.Проблема в том, что я могу установить размер элемента управления на Auto (в ControlTemplate), однако свойства внутренних элементов шаблона не изменяются:например, StrokeThickness остается равным 10, хотя должно стать 1.

Он работает нормально, когда я применяю ScaleTransform к шаблону, но в результате элемент управления становится слишком маленьким при его фактическом использовании:ширина/высота = Автоматически изменяет размер элемента управления до нужного размера а потом применяется масштабное преобразование.Итак, я использую своего рода немасштабируемый элемент управления.

Я немного новичок в WPF, поэтому может быть простой способ сделать это...

Это было полезно?

Решение

Вы можете попытаться привязать ширину и высоту элемента управления внутри шаблона к ширине и высоте соответственно шаблонного элемента управления во время выполнения.Что-то вроде:

<Button>
    <Button.Template>
        <ControlTemplate TargetType={x:Type Button}>
            <Border Width="{TemplateBinding Property=ActualWidth}"
                    Height="{TemplateBinding Property=ActualHeight}">
                <ContentPresenter />
             </Border>
         </ControlTemplate>
    </Button.Template>
</Button>

Обратите внимание, что источниками привязки являются FrameworkElement.ActualWidth и FrameworkElement.ActualHeight свойства шаблонного элемента управления.Эти свойства содержат ширину и высоту элемента управления после его визуализации, которые могут отличаться от указанных в Ширина и Высота характеристики.Это связано с тем, что значения в конечном итоге рассчитываются во время выполнения с учетом размера всех родительских элементов управления в визуальном дереве.

Другие советы

Ваше описание немного расплывчато, но похоже, что вы захотите иметь ViewBox с параметром Stretch, установленным на Uniform, в качестве корневого элемента вашего элемента управления.

Жаль, что вы не можете создать шаблон элемента управления для StackPanel, DockPanel, Grid или любого другого контейнера.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top