Laden...

[Gelöst] WPF - ToggleButton mit Text und grünem Kreis davor stellt weder Text noch grünen Kreis dar

Erstellt von Noumenon vor 7 Jahren Letzter Beitrag vor 7 Jahren 2.095 Views
N
Noumenon Themenstarter:in
8 Beiträge seit 2015
vor 7 Jahren
[Gelöst] WPF - ToggleButton mit Text und grünem Kreis davor stellt weder Text noch grünen Kreis dar

Experimentiere zu Verständniszwecken nur ein bisschen herum und bin (wie übrigens generell, permanent und ständig bei C#/WPF -.-) mal wieder erstaunt (oder auch nicht), wie alles so herrlich ganz und gar und überhaupt nicht funzen tut... -.-

Eigentlich hab' ich hier nur einen reichlich simplen ToggleButton mit ein bisschen custom style... "blub" sollte eigentlich auf dem Button stehen... und noch ein grüner Kreis davor (siehe Markup). Ist nur leider nicht der Fall, zu meiner allergrößten Verwunderung!

Ich verstehe einfach partout nicht, warum es nicht funktioniert, so wie angedacht. Any ideas?!

XAML-Markup:


<Window x:Class="DependencyProperties.MainWindow"
        xmlns:my="clr-namespace:DependencyProperties"
        ...>
    <Window.Resources>
        ...
        <Style x:Key="ToggleButtonStyle1" TargetType="{x:Type ToggleButton}">
        ...
            <Setter Property="Content">
                <Setter.Value>
                    <StackPanel Orientation="Horizontal">
                        <Ellipse Width="11" Height="11"
                                             Stroke="Black"
                                             StrokeThickness="1"
                                             Fill="{TemplateBinding my:ThemeProperties.TickBrush}"
                             />
                        <Label Content="{TemplateBinding my:DPTest.TextString}"/>
                    </StackPanel>
                </Setter.Value>
            </Setter>
            ...
        </Style>
    </Window.Resources>
    <Grid>
        <ToggleButton Name="testBtn" Style="{DynamicResource ToggleButtonStyle1}"
                      my:DPTest.TextString="blub"
                      my:ThemeProperties.TickBrush="Green">
        </ToggleButton>
    </Grid>

Definition der DPs in cs-File:


    public static class ThemeProperties
    {
        public static Brush GetTickBrush(DependencyObject obj)
        {
            return (Brush)obj.GetValue(TickBrushProperty);
        }

        public static void SetTickBrush(DependencyObject obj, Brush value)
        {
            obj.SetValue(TickBrushProperty, value);
        }

        public static readonly DependencyProperty TickBrushProperty =
            DependencyProperty.RegisterAttached(
                "TickBrush",
                typeof(Brush),
                typeof(ThemeProperties),
                new FrameworkPropertyMetadata(Brushes.Black));
    }

    public class DPTest
    {
        public static string GetTextString(DependencyObject obj)
        {
            return (string)obj.GetValue(TextStringProperty);
        }

        public static void SetTextString(DependencyObject obj, string value)
        {
            obj.SetValue(TextStringProperty, value);
        }

        public static readonly DependencyProperty TextStringProperty =
            DependencyProperty.RegisterAttached(
            "TextString",
            typeof(string),
            typeof(DPTest),
            new PropertyMetadata("test"));
    }

Cheers!

5.299 Beiträge seit 2008
vor 7 Jahren

ich denke, die Bindings stimmen nicht.
Erscheinen da keine Binding-Mismatch-Meldungen im Output-Fenster, wenn du das startest?

Der frühe Apfel fängt den Wurm.

N
Noumenon Themenstarter:in
8 Beiträge seit 2015
vor 7 Jahren

ich denke, die Bindings stimmen nicht.
Erscheinen da keine Binding-Mismatch-Meldungen im Output-Fenster, wenn du das startest?

Leider nicht, nein, sieht nicht so aus.
(Entsprechende Messages sind evtl. ein Feature neuerer VS-Versionen? Hab' hier nur VS2012.)

S
506 Beiträge seit 2006
vor 7 Jahren

Probier mal folgendes:
Nimm kein TemplateBinding, sonder ein Binding mit RelativeSource self.

z.B.: ..="{Binding Path=(local:Attached.Test), RelativeSource={RelativeSource Self}}"

5.299 Beiträge seit 2008
vor 7 Jahren

nö - die meldungen kamen schon in 2010.

Du kannst mal ein Binding bewusst falsch setzen, um zu überprüfen, ob du überhaupt BindingMismatch-Feedback bekommst, (und wo - das Ausgabefenster muss man nämlich auch erstmal suchen)

Schmeiss einfach folgenden Unfug ins Grid:

<TextBlock Text="{Binding UffUff}"/>

Das muss einen Fehler ins Ausgabefenster loggen.
Ansonsten musste das Ausgabefenster suchen oder sonstwie zusehen, dass dir dieses Feedback zuteil wird.

@Stu42: Stimmt auch - TemplateBinding ist an dieser Stelle falsch - ist ja kein ControlTemplate.

Der frühe Apfel fängt den Wurm.

N
Noumenon Themenstarter:in
8 Beiträge seit 2015
vor 7 Jahren

Probier mal folgendes:
Nimm kein TemplateBinding, sonder ein Binding mit RelativeSource self.

z.B.: ..="{Binding Path=(local:Attached.Test), RelativeSource={RelativeSource Self}}"

Works! 👍 🙂

Jetzt hapert's nur noch beim Verständnis... Aber ist ja sowieso alles noch völlig Neuland für mich.


        <Style x:Key="ToggleButtonStyle1" TargetType="{x:Type ToggleButton}">
            ...
            <Setter Property="Content">
                <Setter.Value>
                    <StackPanel Orientation="Horizontal">
                        <!--<Ellipse Width="11" Height="11"
                                             Stroke="Black"
                                             StrokeThickness="1"
                                             Fill="{TemplateBinding my:ThemeProperties.TickBrush}"
                             />-->
                        <!--<Label Content="{TemplateBinding my:DPTest.TextString}"/>-->
                        <Ellipse Width="11" Height="11"
                                             Stroke="Black"
                                             StrokeThickness="1"
                                             Fill="{Binding Path=(my:ThemeProperties.TickBrush), RelativeSource={RelativeSource Self}}"
                             />
                        <Label Content="{Binding Path=(my:DPTest.TextString), RelativeSource={RelativeSource Self}}"/>
                    </StackPanel>
                </Setter.Value>
            </Setter>
        </Style>

Du kannst mal ein Binding bewusst falsch setzen, um zu überprüfen, ob du überhaupt BindingMismatch-Feedback bekommst, (und wo - das Ausgabefenster muss man nämlich auch erstmal suchen)

Schmeiss einfach folgenden Unfug ins Grid:

<TextBlock Text="{Binding UffUff}"/>  

Das muss einen Fehler ins Ausgabefenster loggen.
Ansonsten musste das Ausgabefenster suchen oder sonstwie zusehen, dass dir dieses Feedback zuteil wird.

Nix... 🙁

Nutze das Output-Fenster meist irgendwie zwecks Debugging (via Debug.WriteLine()) und lass' mir da grad zur Sicherheit auch noch einmal "Hello World!" ausspucken. Mehr als das - auch mit deinem vorgeschlagenen "Stolperstein" - kommt aber nicht:

'DependencyProperties.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'DependencyProperties.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.HostingProcess.Utilities\11.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.HostingProcess.Utilities.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'DependencyProperties.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Forms.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'DependencyProperties.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'DependencyProperties.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Drawing\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'DependencyProperties.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.HostingProcess.Utilities.Sync\11.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.HostingProcess.Utilities.Sync.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'DependencyProperties.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.Debugger.Runtime\11.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.Debugger.Runtime.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'DependencyProperties.vshost.exe' (Managed (v4.0.30319)): Loaded 'p:\Projekte\C-Sharp\_tutorials\DependencyProperties\DependencyProperties\bin\Debug\DependencyProperties.vshost.exe', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'DependencyProperties.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\PresentationFramework.Aero\v4.0_4.0.0.0__31bf3856ad364e35\PresentationFramework.Aero.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'DependencyProperties.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_32\System.Data\v4.0_4.0.0.0__b77a5c561934e089\System.Data.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'DependencyProperties.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'DependencyProperties.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'DependencyProperties.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Microsoft.CSharp\v4.0_4.0.0.0__b03f5f7f11d50a3a\Microsoft.CSharp.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'DependencyProperties.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml.Linq\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.Linq.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'DependencyProperties.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Data.DataSetExtensions\v4.0_4.0.0.0__b77a5c561934e089\System.Data.DataSetExtensions.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'DependencyProperties.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xaml\v4.0_4.0.0.0__b77a5c561934e089\System.Xaml.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'DependencyProperties.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\WindowsBase\v4.0_4.0.0.0__31bf3856ad364e35\WindowsBase.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'DependencyProperties.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_32\PresentationCore\v4.0_4.0.0.0__31bf3856ad364e35\PresentationCore.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'DependencyProperties.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\PresentationFramework\v4.0_4.0.0.0__31bf3856ad364e35\PresentationFramework.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
The thread 'vshost.NotifyLoad' (0x18d0) has exited with code 0 (0x0).
The thread 'vshost.LoadReference' (0x1450) has exited with code 0 (0x0).
'DependencyProperties.vshost.exe' (Managed (v4.0.30319)): Loaded 'p:\Projekte\C-Sharp\_tutorials\DependencyProperties\DependencyProperties\bin\Debug\DependencyProperties.exe', Symbols loaded.
Step into: Stepping over non-user code 'DependencyProperties.App.App'
Step into: Stepping over non-user code 'DependencyProperties.App.InitializeComponent'
'DependencyProperties.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'DependencyProperties.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\PresentationFramework.resources\v4.0_4.0.0.0_de_31bf3856ad364e35\PresentationFramework.resources.dll'
Hello World!
'DependencyProperties.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\PresentationFramework-SystemXml\v4.0_4.0.0.0__b77a5c561934e089\PresentationFramework-SystemXml.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'DependencyProperties.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\UIAutomationTypes\v4.0_4.0.0.0__31bf3856ad364e35\UIAutomationTypes.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'DependencyProperties.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\PresentationFramework-SystemXmlLinq\v4.0_4.0.0.0__b77a5c561934e089\PresentationFramework-SystemXmlLinq.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'DependencyProperties.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\PresentationCore.resources\v4.0_4.0.0.0_de_31bf3856ad364e35\PresentationCore.resources.dll'

Werd's aber auch noch einmal bei mir zu Hause checken, da hab ich VS2015 (Community-Edition).

5.299 Beiträge seit 2008
vor 7 Jahren

ja, ich weiß auch nicht, was die sich bei MS denken.
Ich tät empfehlen, dass du mal in den Optionen einstellst, dass dein Outputfenster wirklich nur Debug-Meldungen outputtet, und nicht das ganze Gefasel da, was du da hast - da findet ja niemand nichts.

Jdfs. da scheint was faul zu sein.

Übrigens VS2012 hat oft die Eigenart, dass Fehler nicht wirklich mit einem Codestop behandelt werden.

Weißt du was ich meine?
Man kann das iwie umstellen, aber hab vergessn wie.

Guck, ein Fehler mit Codestop muss in 2012 so aussehen:

Der frühe Apfel fängt den Wurm.

N
Noumenon Themenstarter:in
8 Beiträge seit 2015
vor 7 Jahren

Ich tät empfehlen, dass du mal in den Optionen einstellst, dass dein Outputfenster wirklich nur Debug-Meldungen outputtet, und nicht das ganze Gefasel da, was du da hast - da findet ja niemand nichts.

Ok, fummel' mich bei Gelegenheit da mal durch.

Hab' grad auch noch einmal gesehen, dass es doch iwie noch net funzt. 🙁

Der Button ist mit "test" beschriftet, so wie bei der Definition der DP als Default-Wert angegeben:


        public static readonly DependencyProperty TextStringProperty =
            DependencyProperty.RegisterAttached(
            "TextString",
            typeof(string),
            typeof(DPTest),
            new PropertyMetadata("test"));

Per Markup müsste die Beschriftung aber zu "blub" geändert werden:


        <ToggleButton Name="testBtn" Style="{DynamicResource ToggleButtonStyle1}"
                      my:DPTest.TextString="blub"
                      my:ThemeProperties.TickBrush="Green">
        </ToggleButton>

N
Noumenon Themenstarter:in
8 Beiträge seit 2015
vor 7 Jahren

Ok, hab' in den Optionen was gefunden und erhalte nun u.a. folgende Fehlermeldungen (wie zum Teil postuliert):

System.Windows.Data Information: 10 : Cannot retrieve value using the binding and no valid fallback value exists; using default instead. BindingExpression:Path=UffUff; DataItem=null; target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')
System.Windows.Data Information: 10 : Cannot retrieve value using the binding and no valid fallback value exists; using default instead. BindingExpression:Path=HorizontalContentAlignment; DataItem=null; target element is 'ContentPresenter' (Name=''); target property is 'HorizontalAlignment' (type 'HorizontalAlignment')
System.Windows.Data Information: 10 : Cannot retrieve value using the binding and no valid fallback value exists; using default instead. BindingExpression:Path=VerticalContentAlignment; DataItem=null; target element is 'ContentPresenter' (Name=''); target property is 'VerticalAlignment' (type 'VerticalAlignment')
System.Windows.Data Information: 10 : Cannot retrieve value using the binding and no valid fallback value exists; using default instead. BindingExpression:Path=HorizontalContentAlignment; DataItem=null; target element is 'ContentPresenter' (Name=''); target property is 'HorizontalAlignment' (type 'HorizontalAlignment')
System.Windows.Data Information: 10 : Cannot retrieve value using the binding and no valid fallback value exists; using default instead. BindingExpression:Path=VerticalContentAlignment; DataItem=null; target element is 'ContentPresenter' (Name=''); target property is 'VerticalAlignment' (type 'VerticalAlignment')
System.Windows.Data Information: 41 : BindingExpression path error: 'UffUff' property not found for 'object' because data item is null.  This could happen because the data provider has not produced any data yet. BindingExpression:Path=UffUff; DataItem=null; target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')
System.Windows.Data Information: 20 : BindingExpression cannot retrieve value due to missing information. BindingExpression:Path=UffUff; DataItem=null; target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')
System.Windows.Data Information: 21 : BindingExpression cannot retrieve value from null data item. This could happen when binding is detached or when binding to a Nullable type that has no value. BindingExpression:Path=UffUff; DataItem=null; target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')
System.Windows.Data Information: 10 : Cannot retrieve value using the binding and no valid fallback value exists; using default instead. BindingExpression:Path=UffUff; DataItem=null; target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')


5.299 Beiträge seit 2008
vor 7 Jahren

Jepp - so müssen Binding-Fehler gemeldet werden - unleserlich, kaum zu verstehen - aber was anderes steht nicht zur Verfügung.
Immerhin siehst du, dass bei deim Werk noch einiges im Argen liegt.

zum anderen Problem:

Ja, das versteh ich auch nicht, was du da machst.
Zumindest den Text kannst du doch ganz normal setzen, denke ich.

Das mit dem grün - soll das eine AttachedProperty werden?
Hab ich grad nicht parat, aber das muss man entsprechend registrieren, und dann auch korrekt abrufen.

Der frühe Apfel fängt den Wurm.

N
Noumenon Themenstarter:in
8 Beiträge seit 2015
vor 7 Jahren

Zumindest den Text kannst du doch ganz normal setzen, denke ich.

In diesem konkreten Fall - ja. In diesem Fall allerdings...


            <Setter Property="Content">
                <Setter.Value>
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="4"/>
                            <RowDefinition Height="44"/>
                            <RowDefinition Height="14"/>
                            <RowDefinition Height="14"/>
                            <RowDefinition Height="14"/>
                        </Grid.RowDefinitions>
                        <Image Grid.Row="1" Source="IconStellatedOctahedron.png" Width="40" Height="40" HorizontalAlignment="Center"/>
                        <Line Grid.Row="2" Stroke="#ff133c5f" X1="0" Y1="0"  X2="50" Y2="0" StrokeThickness="1"
                              HorizontalAlignment="Center" Margin="0,5" SnapsToDevicePixels="True" RenderOptions.EdgeMode="Aliased"/>
                        <Label Grid.Row="3" Content="Stern-" FontSize="10" HorizontalAlignment="Center" Margin="0,-14"/>
                        <Label Grid.Row="4" Content="tetraeder" FontSize="10" HorizontalAlignment="Center" Margin="0,-14"/>
                    </Grid>
                </Setter.Value>
            </Setter>

...gestaltet sich das schwieriger, wenn man nicht unbedingt für 9 Buttons 9x so ziemlich gleichen Code kopieren möchte (wie's aktuell auch noch der Fall ist...).

Das mit dem grün - soll das eine AttachedProperty werden?

Ja, aber auch das erst einmal nur so zu Übungszwecken. Für ein größeres Projekt meinerseits bräuchte ich eine AP für die ImageSource (s.o.). Dachte nur, vllt. fange ich erst einmal mit etwas einfacherem an...

Hab ich grad nicht parat, aber das muss man entsprechend registrieren, und dann auch korrekt abrufen.

In einem anderen Zusammenhang funzt es ja (dort innerhalb eines ControlTemplates von CheckBox/RadioButton).

N
Noumenon Themenstarter:in
8 Beiträge seit 2015
vor 7 Jahren

Hab' grad auch noch einmal gesehen, dass es doch iwie noch net funzt. 🙁

Der Button ist mit "test" beschriftet, so wie bei der Definition der DP als Default-Wert angegeben:

  
        public static readonly DependencyProperty TextStringProperty =  
            DependencyProperty.RegisterAttached(  
            "TextString",  
            typeof(string),  
            typeof(DPTest),  
            new PropertyMetadata("test"));  
  

Per Markup müsste die Beschriftung aber zu "blub" geändert werden:

  
        <ToggleButton Name="testBtn" Style="{DynamicResource ToggleButtonStyle1}"  
                      my:DPTest.TextString="blub"  
                      my:ThemeProperties.TickBrush="Green">  
        </ToggleButton>  
  

Nach wie vor an einer Lösung interessiert... 🙂

Gruß & schönes WE
Nou

N
Noumenon Themenstarter:in
8 Beiträge seit 2015
vor 7 Jahren

lol... I got it!!! 🙂

 <Label Content="{Binding Path=(my:DPTest.TextString), RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}}"/>