我用下面的DataTemplate在許多控制:是否可以使用XAML文件中的XamlReader加載一個XAML文本塊?
<pages:BasePageManageItems x:Class="TestApp.Pages.PageManageAddresses"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:pages="clr-namespace:TestHistorierung.Pages"
xmlns:tk="http://schemas.microsoft.com/wpf/2008/toolkit"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Background="#eee"
VerticalAlignment="Stretch">
<pages:BasePageManageItems.Resources>
<DataTemplate x:Key="manageAreaCellTemplate">
<Border Padding="2">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{DynamicResource ManageLinkStyle}"
Tag="{Binding Id}" Text="Delete" MouseDown="System_Delete_Click"
Margin="0 0 5 0"/>
<TextBlock Style="{DynamicResource ManageLinkStyle}"
Tag="{Binding Id}" Text="Edit" MouseDown="System_Edit_Click"
Margin="0 0 5 0"/>
<TextBlock Style="{DynamicResource ManageLinkStyle}"
Tag="{Binding Id}" Text="Add" MouseDown="System_Add_Click"
Margin="0 0 5 0"/>
<TextBlock Style="{DynamicResource ManageLinkStyle}"
Tag="{Binding Id}" Text="Copy" MouseDown="System_Copy_Click"
Margin="0 0 5 0"/>
</StackPanel>
</Border>
</DataTemplate>
</pages:BasePageManageItems.Resources>
有沒有辦法使用XamlReader從XAML,這樣我可以在DataTemplate中的文本簡單地加載到XAML文件動態?我想象這樣的事情(僞代碼):
<pages:BasePageManageItems x:Class="TestApp.Pages.PageManageAddresses"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:pages="clr-namespace:TestHistorierung.Pages"
xmlns:tk="http://schemas.microsoft.com/wpf/2008/toolkit"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Background="#eee"
VerticalAlignment="Stretch">
<pages:BasePageManageItems.Resources>
<XamlReader Load="XamlBlocks/DateTemplateManageButtons.xaml"/>
</pages:BasePageManageItems.Resources>
當我這樣做時它告訴我:「'ResourceDictionary'根元素需要x:Class屬性來支持XAML文件中的事件處理程序。要麼刪除MouseDown事件的事件處理程序,要麼將ax:Class屬性添加到根元素中。「當我添加x:Class屬性時,出現類似如下的錯誤:」缺少對'TestApp.Pages'類型聲明的部分修飾符。 BasePageManageItems';另一個此類型的部分聲明存在「 – 2009-11-26 16:57:25
oops,沒有注意到事件處理程序,我更新了答案 - 這使基於ResourceDictionary的解決方案稍微複雜一些,但完全排除基於XamlReader的解決方案(事件接線由帶有生成代碼的編譯器,XamlReder無法處理事件)。 – Nir 2009-11-29 09:54:43