2017-12-11 3 views
-1

Ich habe ein 'GameControl: FrameworkElement'. Ich habe es in der XAML wie folgt aus:Wie binden Sie TextBlock an eine selbst erstellte FrameworkElement-Eigenschaft?

<local:GameControl x:Name="control"/> 

Diese GameControl eine Eigenschaft hat, die eine eigene Klasse:

public Gem selectedGem {get; set;} 

Jetzt will ich dieses Juwel der Informationen in einen Textblock schreiben, so dass die Der Spieler wird seine Eigenschaften sehen.

Wie binde ich die Eigenschaften meines eigenen FrameworkElements an die Elemente von MainWindow?

-

Voll XAML:

<Window x:Class="GemTowerDefense.MainWindow" 
    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:GemTowerDefense" 
    mc:Ignorable="d" 
    Title="Gem Tower Defense" Height="670" Width="800" 
    ResizeMode="NoResize"> 
<Grid> 
    <Border Background="Gray" Height="600" Width="600" Margin="3,26,189,3"> 
     <local:GameControl x:Name="control"/> 
    </Border> 

    <Border Background="LightSlateGray" HorizontalAlignment="Left" VerticalAlignment="Top" Height="285" Margin="608,181,0,0" Width="170"> 
     <TextBlock x:Name="tbInfo" Text="Gem information"> 
     </TextBlock> 
    </Border> 
</Grid> 
</Window> 

(statt Text = Gem Informationen, ich will die Kontrolle des selectedGem die Bindung, oder an einen seiner String-Typ-Eigenschaft)

Antwort

1

Sie machen Ihre Eigenschaft zu einem dependency property und wenn Sie diese Eigenschaft an den TextBlock.Text binden, verwenden Sie einen Konverter. Suchen Sie Stackoverflow, um Milliarden Beispiele zu beiden Themen zu finden. Die Bindung würde wie folgt aussehen:

Text="{Binding ElementName=control, Mode=OneWay, Path=selectedGem, Converter={local:ExampleConverter}}" 

Ich finde es am einfachsten Konverter in erstellen Code-Behind:

public class ExampleConverter : MarkupExtension, IValueConverter 
{ 
    public ExampleConverter() 
    { 

    } 

    public override object ProvideValue(IServiceProvider serviceProvider) 
    { 
     return this; 
    } 

    #region IValueConverter Members 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if(value != null && value is Gem) 
      return (value as Gem).GemAsText(); 
     return value; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return value; 
    } 
    #endregion 
} 
+0

tyvm! Ich habe tatsächlich viele Lösungen betrachtet, aber was sie alle übersprungen haben, war der Teil: Binding ElementName = control, von dem ich nicht wusste, dass er existiert, ich habe ihn nur mit DataContext und Path und als statische Ressource verwendet. Dies löste mein Problem vollständig. – Dragonturtle

Verwandte Themen