2013-12-04 4 views
0

Я создал базовую структуру, которая позволяет мне отображать представления в модальном диалоговом окне. Окно «контейнер» выглядит примерно так (только XAML, имеющей отношение к моей проблеме): -Пользовательский контроль XAML/размер окна

<Window SizeToContent="WidthAndHeight" 
     ResizeMode="{Binding DialogResizeMode}">   
    <DockPanel LastChildFill="True"> 
     <Border DockPanel.Dock="Bottom"> 
      <!-- This is where the buttons are rendered --> 
     </Border> 

     <ContentControl /> 
    </DockPanel> 
</Window> 

Просмотров (элементы управления UserControl) помещаются в ContentControl, с типичным видом смотрит что-то вроде этого: -

<UserControl ..the usual stuff.. 
      Width="500" 
      Height="400"> 
    <!-- etc. --> 
</UserControl> 

Установив ширину и высоту, это означает, что представление может эффективно управлять размерами модального диалога (из-за установки окна SizeToContent="WidthAndHeight" в окне контейнера).

Проблема в том, что теперь мне нужно сделать диалог изменчивым в некоторых сценариях. Если я установил родительский Window ResizeMode в CanResize, пользовательский элемент управления останется в фиксированном размере в центре диалога, так как окно будет изменено.

Я подозреваю, что мне нужно будет использовать другой подход к настройке начального размера окна, например, предоставить ширину и высоту окна для привязки (если только я не пропустил простое решение). Какие-либо предложения?

Редактировать

Я нашел решение, удалив SizeToContent опции из родительского окна и удаления Ширина & Высоты от пользовательского элемента управления XAML. Теперь я установить размер окна из нагруженного события пользовательского элемента управления: -

var window = Window.GetWindow(this); 
window.Width = 500; 
window.Height = 400; 

Он чувствует себя немного Hacky, хотя - это было бы хорошо, если бы это могло быть достигнуто с помощью XAML-единственное решение.

ответ

0

Что мешает вам связываться с вашим имуществом ResizeMode и использовать Style триггеры для установки свойств? Что-то вроде линии,

<Style TargetType="{x:Type UserControl}"> 
     <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=ResizeMode, RelatveSource={RelativeSource AncestorType=Window}}" Value="NoResize"> 
        <Setter Property="Width" Value="500"></Setter> 
        <Setter Property="Height" Value="400"></Setter> 
       </DataTrigger> 
     </Style.Triggers> 
</Style> 
+0

Я хочу, чтобы пользовательский элемент управления (вид) устанавливал размеры окна, а не наоборот. Окно представляет собой контейнер, который я использую для отображения представлений в виде модальных диалогов, и, как объяснялось выше, я бы установил ширину и высоту представления и размер окна соответствовал бы содержимому. Теперь у меня есть требование показать диалоги изменения размеров, но этот трюк не работает, когда ResizeMode = CanResize родительского окна - окно первоначально отображается с правильным размером, но по мере того, как вы перетаскиваете его больше, UC остается в центре окна в его «фиксированных» размерах. –

+0

В приведенном выше стиле, если вы добавите еще один триггер для 'CanResize' и установите горизонтальное и вертикальное выравнивание в' Stretch', с 'MinHeight' и' MinWidth' вместо 'Height' и' Width', что произойдет? –

Смежные вопросы