競猜動態加載後這到底blatently容易,我只是我一記塊或東西上,但這裏有雲:綁定的UIElement的DataContext與XamlReader.Load(...)
這基本上是關於一個打印預覽一些運輸標籤。由於目標是能夠使用不同的標籤設計,因此我目前使用XamlReader.Load()
從XAML文件動態加載預覽標籤模板(以便可以在不必重新編譯程序的情況下進行修改)。
public UIElement GetLabelPreviewControl(string path)
{
FileStream stream = new FileStream(path, FileMode.Open);
UIElement shippingLabel = (UIElement)XamlReader.Load(stream);
stream.Close();
return shippingLabel;
}
加載的元素基本上是一個帆布
<Canvas Width="576" Height="384" Background="White"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Canvas.Resources>
<!-- Formatting Stuff -->
</Canvas.Resources>
<!-- Layout template -->
<TextBlock Margin="30 222 0 0" Text="{Binding Path=Name1}" />
<!-- More bound elements -->
</Canvas>
插入到一個邊境管制:
<Border Grid.Column="1" Name="PrintPreview" Width="596" Height="404" Background="LightGray">
</Border>
顯然我很懶,不想更新的DataContext每當父級上的DataContext發生更改時(因爲它也是錯誤的來源),在預覽上手動進行預覽,但我寧願在後面的代碼中創建Binding:
try
{
this.PrintPreview.Child = GetLabelPreviewControl(labelPath);
Binding previewBinding = new Binding();
previewBinding.Source = this.PrintPreview.DataContext;
(this.PrintPreview.Child as FrameworkElement).SetBinding(FrameworkElement.DataContextProperty, previewBinding);
}
catch (Exception ex)
{
// Handle Exception Stuff here...
}
在加載模板時,它可以很好地工作。該綁定更新所有預覽的數據字段。
DataContext在父級更改時出現問題。然後這個改變並不反映在加載的預覽中,但是Context只是保持綁定到舊對象......我的綁定表達式有什麼問題,或者我在這裏丟失了什麼?
你不應該需要DataContext的所有結合,作爲DataContext的是默認由[屬性值繼承(HTTPS父元素繼承:// MSDN。 microsoft.com/en-us/library/ms753197(v=vs.100).aspx)。 – Clemens
謝謝......那是錯誤。我不知何故在腦海中想到,我必須在運行時加載'UIElement'後手動綁定'DataContext'。 – Adwaenyth