Krik
Fleet Admiral
- Registriert
- Juni 2005
- Beiträge
- 12.000
Moin zusammen,
ich habe ein kleines User Control erstellt, das ein Border- und darin ein Label-Control enthalten. Jetzt will ich beide Controls als Property nach außen sichtbar machen, sodass man sie bequem ändern kann.
Ich habe also ein Property im User Control erstellt, das so aussieht:
Das Property:
Füge ich jetzt das User Control in einem Fenster hinzu:
Blendet er mir bei <l:MyUserControl ?/> nicht das oben definierte Property als Auswahl ein. Normalerweise poppt da ja ein kleines Fenster auf, dass die verfügbaren Properties anzeigt.
Warum macht er das nicht?
Edit: Macht er doch. Nach einem Neustart (Beta-Software ) zeigte er es mir an, allerdings als <l:MyUserControl ContentBorder="" /> das so nicht zu gebrauchen ist. Strings nimmt er hier ja nicht.
Über das Eigenschaftenfenster kann ich mir die Property-Änderung in den XAML-Code einfügen lassen. Das Ergebnis sieht dann so aus:
Das ist unerwartet, aber ich vermute, es liegt an der Verschachtelung der Controls im User Control.
Hier bekomme ich allerdings das drin liegende Border nicht geändert. Bei zB <Border Background="Red"/> tut sich nix.
Warum ist das so?
Eigentlich will ich nur so was wie <l.MyUserControl ContentBorder.Background="Red"> machen können. Und VS soll mir das auch direkt so vorschlagen.
Verwendet wird Visual Studio 11 Ultimate Beta unter Windows 8 Consumer Preview. Das Projekt ist ein WPF-Projekt mit .Net 4.5.
Gruß, Laurin
ich habe ein kleines User Control erstellt, das ein Border- und darin ein Label-Control enthalten. Jetzt will ich beide Controls als Property nach außen sichtbar machen, sodass man sie bequem ändern kann.
Ich habe also ein Property im User Control erstellt, das so aussieht:
Code:
<UserControl x:Name="UserControl" x:Class="MyProject.MyUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="100" d:DesignWidth="100"
Height="100" Width="100"
MinHeight="50" MinWidth="50">
<Grid x:Name="Grid" Background="#FF0F0F0F" Height="{Binding ActualHeight, ElementName=UserControl, Mode=OneWay}" Width="{Binding ActualWidth, ElementName=UserControl, Mode=OneWay}" >
<Border x:Name="Border" BorderThickness="2" Background="Black" BorderBrush="White" Margin="5">
<!-- mehr Inhalt -->
</Border>
</Grid>
</UserControl>
Code:
public static readonly DependencyProperty ContentBorderProperty = DependencyProperty.Register("ContentBorder", typeof(Border), typeof(MyUserControl));
public Border ContentBorder
{
get { return this.Border; } // "Border" ist der Name des Border-Objekts
set { this.Border = value; }
}
Füge ich jetzt das User Control in einem Fenster hinzu:
Code:
<Window x:Class="MyProject.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:l="clr-namespace:MyProject"
Title="MainWindow" Height="350" Width="525">
<Grid>
<l:MyUserControl />
</Grid>
</Window>
Warum macht er das nicht?
Edit: Macht er doch. Nach einem Neustart (Beta-Software ) zeigte er es mir an, allerdings als <l:MyUserControl ContentBorder="" /> das so nicht zu gebrauchen ist. Strings nimmt er hier ja nicht.
Über das Eigenschaftenfenster kann ich mir die Property-Änderung in den XAML-Code einfügen lassen. Das Ergebnis sieht dann so aus:
Code:
<Window x:Class="MyProject.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:l="clr-namespace:MyProject"
Title="MainWindow" Height="350" Width="525">
<Grid>
<l:MyUserControl>
<l:MyUserControl.ContentBorder>
<Border/>
</l:MyUserControl.ContentBorder>
</l:MyUserControl>
</Grid>
</Window>
Hier bekomme ich allerdings das drin liegende Border nicht geändert. Bei zB <Border Background="Red"/> tut sich nix.
Warum ist das so?
Eigentlich will ich nur so was wie <l.MyUserControl ContentBorder.Background="Red"> machen können. Und VS soll mir das auch direkt so vorschlagen.
Verwendet wird Visual Studio 11 Ultimate Beta unter Windows 8 Consumer Preview. Das Projekt ist ein WPF-Projekt mit .Net 4.5.
Gruß, Laurin
Zuletzt bearbeitet: