2016-04-08 15 views
0

Ich versuche, einen ScrollViewer mit einigen Anpassungen zu erstellen. Wie folgt aus:Erstellen eines benutzerdefinierten ScrollViewer mit WPF UserControl

UserControl1.xaml:

<UserControl x:Class="MyApp.Control.UserControl1" 
      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="300"> 
    <UserControl.Template> 
     <ControlTemplate> 
      <Grid> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="*" /> 
        <RowDefinition Height="20" /> 
       </Grid.RowDefinitions> 
       <ContentPresenter Grid.Row="0" Content="{Binding ElementName=uc, Path=DynamicUserControl}" /> 
       <Rectangle Grid.Row="1" Fill="#88ff0000" /> 
      </Grid> 
     </ControlTemplate> 
    </UserControl.Template> 
</UserControl> 

UserControl1.xaml.cs:

public partial class UserControl1 : UserControl 
{ 
    public UserControl1() 
    { 
     InitializeComponent(); 
    } 

    public static readonly DependencyProperty DynamicUserControlProperty = DependencyProperty.Register("DynamicUserControl", typeof(object), typeof(UserControl1), new PropertyMetadata(null)); 

    public object DynamicUserControl 
    { 
     get { return GetValue(DynamicUserControlProperty); } 
     set { SetValue(DynamicUserControlProperty, value); } 
    } 
} 

TestForm.xaml (Mit Hilfe des UserControl1):

<Window x:Class="MyApp.TestForm" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:MyApp.Control" 
     mc:Ignorable="d" 
     Title="TestForm" Height="200" Width="500"> 
    <Grid Background="{StaticResource AimDarkGradBg01}"> 
     <local:UserControl1> 
      <local:UserControl1.DynamicUserControl> 
       <Button>Click me</Button> 
      </local:UserControl1.DynamicUserControl> 
     </local:UserControl1> 
    </Grid> 
</Window> 

Aber das Problem Egal welchen Inhalt ich in die local:UserControl1.DynamicUserControl stelle, nichts wird gerendert.

Jeder kann mir helfen?

Antwort

1

Das Problem ist eigentlich bindender Ausdruck. Die richtige Bindung soll wie:

UserControl1.xaml:

<UserControl x:Class="MyControls.UserControl1" 
      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" 
      xmlns:local="clr-namespace:MyControls" 
      mc:Ignorable="d" 
      x:Name="uc"> 
    <Grid> 
     <ScrollViewer> 
      <WrapPanel> 
       <!-- Dynamic Content --> 
       <ContentPresenter Content="{Binding RelativeSource={RelativeSource AncestorType={x:Type control:UserControl1}}, Path=DynamicUserControl}"/> 
      </WrapPanel> 
     </ScrollViewer> 
     <Canvas> 
      <!-- Some Code --> 
     </Canvas> 
    </Grid> 
</UserControl> 

Wenn Sie bemerken ich Ihre Definition der Vorlage entfernt, in dem Fall, dass Sie es nicht brauchen. Sie können Ihren Code einfach in das Benutzersteuerelement einfügen.

Die anderen Dateien sind korrekt. Repariere das, was ich dir oben gesagt habe, und es ist gut zu gehen.

+0

Ok, ich erstelle dieses Beispiel, aber wenn ich die Anwendung ausführen, ist der Content Presenter von UserControl1 leer. (Und ich denke in ihn). –

+0

@JonnyPiazzi Bitte beachten Sie die Ergänzung zu meiner Antwort. –

+0

Ok Ich habe es erneut versucht, der ContentPresenter im UserControl bleibt komplett leer. Ich denke, dass ich wpf 4 verwende, das einige verschiedene Verhaltensweisen über viele Dinge hat, denkst du, dass die Version dieses Verhalten macht? –