我已經得到了很多用戶的控制是這樣的:重用XAML塊的最佳方式是什麼?
PageManageCustomers.xaml.cs:
public partial class PageManageCustomers : BasePage
{
...
}
從繼承:
PageBase.cs:
public class BasePage : UserControl, INotifyPropertyChanged
{
...
}
由於PageBase.c s有沒有伴隨的XAML文件,我必須把它引用的XAML放在的每個的用戶控件中,例如繼承它的用戶控件。以下塊在重複一次繼承PageBase
控制的每一個 XAML文件:
<DataTemplate x:Key="manageAreaCellTemplate">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{DynamicResource ManageLinkStyle}"
Tag="{Binding Id}" Text="Delete" MouseDown="System_Delete_Click"/>
<TextBlock Text=" "/>
<TextBlock Style="{DynamicResource ManageLinkStyle}"
Tag="{Binding Id}" Text="Edit" MouseDown="System_Edit_Click"/>
</StackPanel>
</DataTemplate>
我試圖把這個塊成資源文件,但不能得到語法正確的,它說:
'的ResourceDictionary' 根元素 需要斧:類屬性 支持事件處理程序在XAML 文件。爲MouseDown事件移除事件處理程序 ,或者將x:Class屬性添加到根元素。
也許我可以與XamlReader'莫名其妙閱讀這些塊?
如何將此重複代碼塊放在一個位置,以便在每個繼承BagePage的XAML文件中不重複?
下面是此問題的一個可再現例如:
Window1.xaml:
<Window x:Class="TestXamlPage8283.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<StackPanel x:Name="MainContent"/>
</Window>
Window1.xaml.cs:
using System.Windows;
namespace TestXamlPage8283
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
Page1 page1 = new Page1();
MainContent.Children.Add(page1);
Page2 page2 = new Page2();
MainContent.Children.Add(page2);
}
}
}
的Page1.xaml :
<local:BasePage x:Class="TestXamlPage8283.Page1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TestXamlPage8283"
Height="40" Width="300">
<StackPanel>
<TextBlock Text="{Binding PageTitle}"
FontSize="14"
FontWeight="Bold"/>
<TextBlock Text="This is XAML that is specific to page one." />
</StackPanel>
</local:BasePage>
Page1.xaml.cs:
namespace TestXamlPage8283
{
public partial class Page1 : BasePage
{
public Page1()
{
InitializeComponent();
PageTitle = "Page One";
}
}
}
Page2.xaml:
<local:BasePage x:Class="TestXamlPage8283.Page2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TestXamlPage8283"
Height="40" Width="300">
<StackPanel>
<TextBlock Text="{Binding PageTitle}"
FontSize="14"
FontWeight="Bold"/>
<TextBlock Text="This is XAML that is specific to page two." />
</StackPanel>
</local:BasePage>
Page2.xaml。CS:
namespace TestXamlPage8283
{
public partial class Page2 : BasePage
{
public Page2()
{
InitializeComponent();
PageTitle = "Page Two";
}
}
}
BasePage.cs:
using System.Windows.Controls;
using System.ComponentModel;
namespace TestXamlPage8283
{
public class BasePage : UserControl, INotifyPropertyChanged
{
#region ViewModelProperty: PageTitle
private string _pageTitle;
public string PageTitle
{
get
{
return _pageTitle;
}
set
{
_pageTitle = value;
OnPropertyChanged("PageTitle");
}
}
#endregion
public BasePage()
{
DataContext = this;
}
#region INotifiedProperty Block
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
}
如何採取這個塊
<TextBlock Text="{Binding PageTitle}"
FontSize="14"
FontWeight="Bold"/>
出Page1.xa的毫升和Page2.xaml並把它放在一個的地方,所以我可以參考來自Page1.xaml和Page2.xaml?(所以,當我想改變字號= 14〜字號= 16,我只需要改變它在一個地方)
看來你問的是類似於Asp.net的主頁面。我不知道這是否可能。對於您的TextBlock最後一個示例(更改PageTitle文本塊的FontSize),是不是指什麼樣式? – 2009-11-26 18:05:56