пытаясь повторно использовать окно WPF - PullRequest
3 голосов
/ 12 сентября 2011

xaml ниже для окна, которое я использую в нескольких презентациях, где единственное, что меняется, - это UserControl, который он размещает:

    <Window x:Class="Smack.ConstructionAdmin.Presentation.Wpf.Views.Admin.Employees.EmployeeShellView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:local="clr-namespace:Smack.ConstructionAdmin.Presentation.Wpf.Views.Admin.Employees" 
        xmlns:s="clr-namespace:Smack.ConstructionAdmin.Presentation.Wpf" 
        xmlns:cmdRef="clr-namespace:Smack.Core.Presentation.Wpf.ViewModels.Commands.Reference;assembly=Smack.Core.Presentation.Wpf" 

        Background="{DynamicResource WaveWindowBackground}"
        Title="{Binding Source={x:Static s:Strings.AppName}}"  
        Icon="pack://application:,,,/Smack.ConstructionAdmin.Presentation.Wpf;component/Images/Time-Machine_16.png"
        FontFamily="Arial"  
        WindowStartupLocation="CenterScreen" Width="750" Height="600" 
        >
    <DockPanel>
        <local:EmployeeShellUserControl DataContext="{Binding}"  />
    </DockPanel>

    <Window.InputBindings>
        <cmdRef:KeyBindingEx  CommandReference="{Binding AddCommand}"/>
        <cmdRef:KeyBindingEx  CommandReference="{Binding EditCommand}"/>
        <cmdRef:KeyBindingEx  CommandReference="{Binding DeleteCommand}"/>
    </Window.InputBindings>

</Window>

Так что, кажется, имеет смысл повторно использовать части, которые как-то не меняются. Вот моя первая попытка сделать это с помощью стиля:

<Style x:Key="MyWindowStyle" TargetType="{x:Type Window}">
    <Setter Property="Background" Value="{DynamicResource WaveWindowBackground}"></Setter>
    <Setter Property="FontFamily" Value="Arial"></Setter>
    <Setter Property="Height" Value="600"></Setter>
    <Setter Property="Width" Value="750"></Setter>
    <Setter Property="Title" Value="{Binding AppName}"></Setter>
    <Setter Property="Icon" Value="{Binding IconUri}"></Setter>
</Style>

Болевые точки

  1. Не удалось найти установщик свойства для WindowStartupLocation
  2. Я не вижу, как сделать InputBindings частью стиля

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

Приветствие.
Berryl

Ответы [ 2 ]

4 голосов
/ 12 сентября 2011

Почему бы вам просто не создать окно этого типа без содержимого, а затем добавить UserControl по вашему выбору в качестве Content перед его отображением?Вам не понадобится несколько Window подклассов, и вам не нужно будет связываться со стилями.

Тривиальный пример, когда мы устанавливаем содержимое окна в строку (обычно вы используете некоторыеподходящий UserControl):

var window = new EmployeeShellView();
window.Content = "Hello world!"; // set to your UserControl
window.Show();

Если вы хотите вставить комплекс UserControl, произнесите следующее:

<UserControl x:Class="MyControl">
    <DockPanel>
        <local:EmployeeShellUserControl DataContext="{Binding}"  />
    </DockPanel>
</UserControl>

Вы должны сделать:

var window = new EmployeeShellView();
window.Content = new MyControl();
window.Show();
0 голосов
/ 12 сентября 2011

Предлагаю преодолеть ваши проблемы с прикрепленным поведением, которое будет установлено в стиле.

Просто Google прикрепил поведение wpf

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...