У меня есть главное окно, которое содержит сетку, во время события, загруженного окном, я буду динамически создавать экземпляр пользовательского элемента управления и добавлять его в сетку. Чтобы пользователь мог самостоятельно адаптироваться при изменении основного окна, я хочу привязать ширину и высоту пользовательского элемента управления к сетке ActualWidth
и ActualHeight
.привязка, объявленная в xaml, не работает
Первый способ заключается в создании привязки объекта в коде, то же место в 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?
Можете ли вы опубликовать ошибки привязки выходного окна для двух сценариев XAML, которые вы опубликовали. Также вы можете разместить XAML для сетки, к которой вы добавляете этот UserControl. Является ли сетка непосредственным родителем этого UserControl? –
Я создал новый тест, и теперь все работает. Если я использую сетку как родительский элемент пользовательского элемента управления, мне не нужно вставлять привязки. Если я использую стекную панель, эти два сочетания xmal являются эффективными. Я не понимаю, почему предыдущий тест не работал, так как я сильно изменился в старом тестовом проекте, я не смог восстановить предыдущий код. – intangible02