1111 Просто чтобы прояснить: оба подхода будут работать. Я просто предпочитаю это:)
Относительно того, понятнее ли это, чем синтаксис выражения запроса ... Я не уверен. Я обычно использую вызовы методов, когда это просто случай использования одного оператора, но для Join
, GroupJoin
, SelectMany
и GroupBy
выражения запросов действительно упрощают вещи. Попробуйте оба варианта и посмотрите, какие вы найдете более читабельными:)
Я думаю, что это довольно просто с XamlReader, попробуйте, сам не пробовал, но я думаю, что это должно работать.
http: //blogs.msdn. com / ashish / archive / 2007/08/14 / dynamic-loading-xaml.aspx
Как заметил Якоб Кристенсен, вы можете загрузить любой XAML, который хотите, используя XamlReader.Load
. Это относится не только к стилям, но и к элементам UIElement
. Вы просто загружаете XAML, например:
UIElement rootElement;
FileStream s = new FileStream(fileName, FileMode.Open);
rootElement = (UIElement)XamlReader.Load(s);
s.Close();
Затем вы можете установить его как содержимое подходящего элемента, например, для
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Foo Bar">
<Grid x:Name="layoutGrid">
<!-- any static elements you might have -->
</Grid>
</Window>
вы можете добавить rootElement
в сетку
с помощью:
layoutGrid.Children.Add(rootElement);
layoutGrid.SetColumn(rootElement, COLUMN);
layoutGrid.SetRow(rootElement, ROW);
Естественно, вам также придется вручную подключать любые события для элементов внутри rootElement
в коде программной части. В качестве примера предположим, что ваш rootElement
содержит Canvas
с набором Path
s, вы можете назначить Path
s ' MouseLeftButtonDown
вроде этого:
Canvas canvas = (Canvas)LogicalTreeHelper.FindLogicalNode(rootElement, "canvas1");
foreach (UIElement ui in LogicalTreeHelper.GetChildren(canvas)) {
System.Windows.Shapes.Path path = ui as System.Windows.Shapes.Path;
if (path != null) {
path.MouseLeftButtonDown += this.LeftButtonDown;
}
}
Я не пробовал переключать файлы XAML на лету,
Вы можете загрузить любой XAML, который хотите, используя XamlReader.Load .
Если вы стилизуете все элементы управления в своем приложении и определяете эти стили в словаре ресурсов приложения, вы можете загружать новые стили, определенные в XAML, где-нибудь еще с помощью XamlReader.Load и заменять части словаря ресурсов загруженным XAML. Внешний вид ваших элементов управления изменится соответствующим образом.
Посмотрите http://www.codeproject.com/Articles/19782/Creating-a-Skinned-User-Interface-in-WPF - Джош Смит написал отличная статья о том, как сделать скиннинг в WPF.