2017-02-21 1 views
1

Ansicht Daten anzeigen zwischen einem Content und InhaltAlle BindungAnsicht anzeigen Datenbindung zwischen einem Content und InhaltAlle

ich die PlaneRotationDemoPage Probe aus dem Xamarin bin mit Forms Buch https://download.xamarin.com/developer/xamarin-forms-book/XamarinFormsBook-Ch21-Apr2016.pdf

Ich habe einen Content und wollen um ein Slider-Steuerelement von der ContentPage in eine ContentView zu verschieben, die sich in einer anderen XAML/CS-Datei befindet. Die Inhaltsansicht selbst scheint korrekt referenziert zu sein, die Slider-Steuerelementbindung scheint jedoch nicht korrekt verkabelt zu sein. Ich erhalte eine Fehlermeldung "lösen kann nicht Namen auf Element"

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
     xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
     xmlns:local="clr-namespace:PlaneRotationDemo;assembly=PlaneRotationDemo" 
     x:Class="PlaneRotationDemo.PlaneRotationDemoPage" > 
... 

<local:RoundedBoxView x:Name="handA" 
     StrokeThickness="2" 
     CornerRadius = "40" 
     Stroke = "White" 
     Color = "Gray" 
     AbsoluteLayout.LayoutBounds = "152.0,248.0,15.0,15.0" 
    /> 

... 

<local:SliderTest /> //new ContentView 


//Moving just the slider below into a ContentView 
<!--  
<Slider x:Name="rotationSlider" 
     AbsoluteLayout.LayoutBounds = "0,0,200,50" 
     Maximum="360" 
     Value="{Binding Source={x:Reference Name=handA}, 
     Path=Rotation}" 
     />--> 

//the label below on the ContentPage should bind with the slider that was moved to the ContentView 

<Label Text="{Binding Source={x:Reference rotationSlider}, 
    Path=Value, 
    StringFormat='Rotation = {0:F0}'}" 
    HorizontalTextAlignment="Center" 
    /> 

In der InhaltAlle Datei ...

<ContentView xmlns="http://xamarin.com/schemas/2014/forms" 
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
    x:Class="PlaneRotationDemo.SliderTest"> 
<ContentView.Content> 

//slider moved here 
<Slider x:Name="rotationSlider" 
     Maximum="360" 
     Value="{Binding Source={x:Reference Name=handA}, //should bind with handA in the ContentPage 
     Path=Rotation}" 
     /> 

</ContentView.Content> 

Das Label im Content den Schieber verweisen muss, die ist Jetzt im ContentView

Der Slider, der jetzt in der ContentView ist, muss auf die HandA RoundedBoxView verweisen, die sich in der ContentPage

befindet

Ist dies in XAML möglich?

Antwort

0

Wenn Sie ein Xaml erstellen, erstellt es eine cs und eine automatisch generierte cs (xaml.g.cs) -Datei, in der Ihre x: Name-Referenzen definiert sind. Da HandA Ihre SliderTest.xaml-Datei nicht definiert, erhalten Sie diesen Fehler.

+0

Ich habe versucht, Xmlns hinzufügen: local = "CLR-Namespace: PlaneRotationDemo; Assembly = PlaneRotationDemo" auf die Kopfzeile in der SliderTest.Xaml, aber wie zur Bindung hinzufügen? Value = "{Binding Source = {x: Referenzname = local: handA} funktionierte nicht mit dem Zusatz von local: handA – Anna

0

Enthüllen Sie eine BindableProperty in Benutzerkontrolle (Inhaltsansicht). Binden Sie BindableProperty an Value Eigenschaft in Slider Control.

Und XAML sieht so aus.

<ContentView xmlns="http://xamarin.com/schemas/2014/forms" 
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
    x:Class="PlaneRotationDemo.SliderTest" x:Name=UC> 
<ContentView.Content> 

//slider moved here 
<Slider x:Name="rotationSlider" 
     Maximum="360" 
     Value="{Binding MyBindableProperty, Source={x:Reference Name=UC}, 
     Path=Rotation}"/> 

</ContentView.Content> 

Und die Verwendung wird so sein.

<local:RoundedBoxView x:Name="handA" 
     StrokeThickness="2" 
     CornerRadius = "40" 
     Stroke = "White" 
     Color = "Gray" 
     AbsoluteLayout.LayoutBounds = "152.0,248.0,15.0,15.0" 
    /> 

<local:SliderTest MyBindableProperty={Binding Source={x:Reference handA}}/> 

Hoffe das hilft.

Verwandte Themen