Привязка объявлена в xaml не работает
У меня есть главное окно, которое содержит сетку, во время события загрузки окна я буду динамически создавать экземпляр пользовательского элемента управления и добавлять его в сетку. Чтобы позволить пользовательскому элементу управления адаптироваться при изменении размера главного окна, я хочу привязать ширину и высоту пользовательского элемента управления к сетке. ActualWidth
а также ActualHeight
,
Первый способ - создать объект привязки в коде, в том же месте события window_loaded,
Binding widthBinding = new Binding("ActualWidth");
widthBinding.Source = panel;
BindingOperations.SetBinding(uc, WidthProperty, widthBinding);
Binding heightBinding = new Binding("ActualHeight");
heightBinding.Source = panel;
BindingOperations.SetBinding(uc, HeightProperty, heightBinding);
panel.Children.Add(uc);
это работало как ожидалось.
Второй способ - использовать привязку xaml в файле xaml пользовательского элемента управления,
<UserControl x:Class="S2T.RAHS2.ContentAcquisition.FileViewer.WordViewer"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Loaded="UserControl_Loaded" Unloaded="UserControl_Unloaded"
Width="{Binding ElementName=ContainerElement, Path=ActualWidth}"
Height="{Binding ElementName=ContainerElement, Path=ActualHeight}">
или же
<UserControl x:Class="S2T.RAHS2.ContentAcquisition.FileViewer.WordViewer"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Loaded="UserControl_Loaded" Unloaded="UserControl_Unloaded"
Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Grid}, AncestorLevel=1}, Path=ActualWidth}"
Height="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Grid}, AncestorLevel=1}, Path=ActualHeight}">
Но это не сработало.
Могу ли я знать, что не так с подходом xaml?
1 ответ
Можете ли вы попробовать использовать выравнивания вместо привязки?
<UserControl x:Class="S2T.RAHS2.ContentAcquisition.FileViewer.WordViewer"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Loaded="UserControl_Loaded" Unloaded="UserControl_Unloaded"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
Проблема с привязкой заключается в том, что ActualHeight
а также ActualWidth
может увеличиться, если что-то на панели заставит это увеличиться. Это особенно верно с StackPanel
s.
Если вы прибываете, используя Grid
, это может работать с привязкой к родителю ActualWidth
а также ActualHeight
, Я обнаружил, что иногда это работает, но часто что-то в панели увеличивает размер и портит привязку.