Ich habe Probleme beim Erstellen eines benutzerdefinierten Fenstertyps, der von System.Windows.Window abgeleitet ist. Es scheint zwei Probleme zu geben, die auftreten. Zum einen gibt es einen Fehler bei der Kompilierung unter AngabeWPF: Vererbt von Fenster
Kann nicht das statische Element ‚Content‘ von der Art ‚Control‘ finden
Das in Referenz auf das Contentelement in der Control für die benutzerdefiniertes Fenster (siehe Codebeispiel für BaseWindowResource.xaml unten). Ich weiß nicht, warum das passiert, da BaseWindow von Window abstammt und daher eine Content-Eigenschaft haben muss ...
Das zweite Problem ist die Tatsache, dass ich anscheinend nicht das ContentRendered-Ereignis von BaseWindow bekommen kann fire, wenn Window1, das von BaseWindow abgeleitet ist, das Rendern beendet hat ... Ich muss das ContentRendered-Ereignis in BaseWindow behandeln, da der Handler viel Code enthält, der sonst in jede abgeleitete Klasse kopiert werden müsste ...
Auf jeden Fall, hier ist der Code. Jede Hilfe wird sehr geschätzt!
Cheers,
Andrew
App.xaml:
<Application x:Class="WpfApplication4.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="Window1.xaml">
<Application.Resources>
<ResourceDictionary Source="/BaseWindowResource.xaml" />
</Application.Resources>
</Application>
BaseWindowResource.xaml:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication4">
<Style TargetType="{x:Type local:BaseWindow}" x:Key="BaseWindowStyleKey">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Grid>
<Rectangle Margin="20" Fill="Green" x:Name="MyRect" />
<ContentPresenter Margin="30" x:Name="MyContentPresenter"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
BaseWindow.cs:
public class BaseWindow : Window
{
public BaseWindow()
{
Style = FindResource("BaseWindowStyleKey") as Style;
ContentRendered += new EventHandler(BaseWindow_ContentRendered);
}
void BaseWindow_ContentRendered(object sender, EventArgs e)
{
ContentPresenter contentPresenter = Template.FindName("MyContentPresenter", this) as ContentPresenter;
MessageBox.Show(String.Format("The dimensions for the content presenter are {0} by {1}",
contentPresenter.ActualWidth,
contentPresenter.ActualHeight));
}
}
Window1.xaml:
<local:BaseWindow x:Class="WpfApplication4.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication4"
Title="Window1" Height="300" Width="300">
</local:BaseWindow>
und schließlich Window1.xaml.cs:
public partial class Window1 : BaseWindow
{
public Window1()
{
InitializeComponent();
}
}
Nun, das ist der gesamte Code. Es isoliert die Probleme ziemlich genau.
Cheers,
Andrew
Wow lösen, Sie qualifizieren den Eigenschaftsnamen richtig waren. Das ContentRendered-Ereignis wird jedoch immer noch nicht ausgelöst ... – Andrew
Hat es Inhalt? MSDN gibt folgend an: 'Wenn das Fenster keinen Inhalt enthält, wird dieses Ereignis nicht ausgelöst. http://msdn.microsoft.com/en-us/library/system.windows.window.contentrendered.aspx – decyclone
Dank decyclone, das das Problem behoben. Gutes Auge.Ich weiß, dass ich diese Seite gelesen habe, aber ich denke, ich war nicht vorsichtig genug. Vielen Dank! – Andrew