WPF Window
s'deki ASP.Net ana sayfası konseptini (MVC'deki Düzen) simüle etmeye çalışıyorum. WPF
Window
s için bu tür bazı davranışları belirleyen bir
CustomWindow
sınıf var:
public class CustomWindow : Window
{
//...
}
Ve MasterWindowBase
; Benim UserControl
s çeşit alır bir CustomWindow
(stil yoluyla) pencere içerik olduğu:
public abstract class MasterWindowBase : CustomWindow
{
public MasterWindowBase(MyUserControlBase content)
{
ContentUserControl = content;
Style = Application.Current.FindResource("MasterWindowStyle") as Style;
}
#region ContentUserControl Property
public MyUserControlBase ContentUserControl
{
get { return (MyUserControlBase)GetValue(ContentUserControlProperty); }
set { SetValue(ContentUserControlProperty, value); }
}
public static readonly DependencyProperty ContentUserControlProperty =
DependencyProperty.Register("ContentUserControl", typeof(MyUserControlBase), typeof(MasterWindowBase));
#endregion
}
uygulama kaynaklarında tanımlanan stili:
<Style x:Key="MasterWindowStyle" TargetType="{x:Type local:MasterWindowBase}">
<Setter Property="Content">
<Setter.Value>
<Grid>
<StackPanel>
<TextBlock Text="This is a master window"/>
<ContentPresenter Content="{Binding ContentUserControl, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:MasterWindowBase}}}"/>
</StackPanel>
</Grid>
</Setter.Value>
</Setter>
</Style>
Ve MasterWindow
; Belirtilen UserControl
tip MasterWindowBase
bir örneğini oluşturmak için kullanılan genel bir pencere: İlk Window.Show
Şimdi
public class MasterWindow<TMyUserControlBase>
: MasterWindowBase
where TMyUserControlBase : MyUserControlBase, new()
{
public MasterWindow() : base(new TMyUserControlBase()) { }
}
, her şey mükemmel çalışıyor, ama sonra iki mantıksal hatalar yakalandı:
- kapatayım Penceresi ve farklı bir
UserControl
ile yeni bir örneğini gösterir, ilk gösterilenMasterWindow
içeriğini yükler. MasterWindow
ile aynıUserControl
numaralı yeni örneğini gösterdiğimde veya şu anda görünen pencereleri kapatmadan farklı biriyle görüntülediğimde, şu anda görüntülenen tümMasterWindow
örneklerinin içeriğini temizler ve içeriğini yükler. Yeni örnekte gösterilen ilkMasterWindow
. tarzı aslında (gerçek projede)CustomWindow
'ın tarzı dayanmaktadır çünkü zatenTemplate
özelliğini kullananMasterWindowStyle
tarzı içTemplate
özelliğini kullanamazsınız
Not.
Herhangi bir yardım için teşekkür ederiz.
Harika çözümler. Cevabınızı okuduktan sonra, aynı zamanda stile 'x: Shared = "False" özelliğini ekleyebileceğimi ve yine de 'İçerik' özelliğini kullanabileceğimi de öğrendim. Teşekkürler! –