Wie greife ich von xaml aus auf Schaltflächen in einem UserControl zu?

ei der Arbeit habe ich mehrere Seiten, jede mit Schaltflächen an den gleichen Stellen und mit den gleichen Eigenschaften. Jede Seite hat auch kleinere Unterschiede. Zu diesem Zweck haben wir eine userControl-Vorlage erstellt, alle Schaltflächen darin eingefügt und dann dieses Benutzersteuerelement auf alle Seiten angewendet. Jetzt ist es jedoch ziemlich schwierig, auf die Schaltflächen zuzugreifen und sie in der XAML jeder Seite zu ändern, da sie sich in einem UserControl auf der Seite befinden .....Wie greife ich elegant auf die Schaltflächen auf jeder Seite zu?

Was ich versucht habe:

Gegenwärtig binden wir uns an eine Reihe von Abhängigkeitseigenschaften. Diese Option gefällt mir nicht, weil ich viele Schaltflächen habe und viele Eigenschaften für diese Schaltflächen steuern muss. Das Ergebnis sind Hunderte von Abhängigkeitseigenschaften und ein echtes Durcheinander, durch das wir waten müssen, wenn wir etwas ändern müssen.

Eine andere Methode ist die Verwendung von Stilen. Diese Methode gefällt mir im Allgemeinen, aber da sich diese Schaltflächen in einem anderen Steuerelement befinden, ist es schwierig, sie zu ändern, und die Vorlage ist immer nur für eine Schaltfläche genau richtig.

Adam Kemp schrieb über das Einfügen eines eigenen Buttons durch den BenutzerHie, und dies ist die Methode, die ich derzeit zu implimentieren / zu ändern versuche. Leider habe ich keinen Zugang zu Xamarin.

Obwohl die Vorlage ist eingefügt, wenn der Code ausgeführt wird, die Vorlageist nich Aktualisieren Sie die Schaltfläche korrekt. Wenn ich einen Haltepunkt in den MyButton-Setter lege, kann ich sehen, dassWer ist eigentlich eine leere Schaltfläche und nicht die, die ich in meinem Hauptfenster zugewiesen habe. Wie behebe ich das?

Hier ist ein vereinfachter Code:

Meine Vorlage UserControls xaml:

<UserControl x:Class="TemplateCode.Template"
     x:Name="TemplatePage"
     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="350"
     d:DesignWidth="525"
     DataContext="{Binding RelativeSource={RelativeSource Self}}"
     Background="DarkGray">

     <Grid>
          <Button x:Name="_button" Width="200" Height="100" Content="Template Button"/>
     </Grid>
</UserControl>

Mein Template UserControls Code dahinter:

using System.Windows.Controls;

namespace TemplateCode
{
    public partial class Template : UserControl
    {
        public static Button DefaultButton;

        public Template()
        {
             InitializeComponent();
        }

        public Button MyButton
        {
            get
            {
                 return _button;
            }
            set
            {
                _button = value; //I get here, but value is a blank button?!

                // Eventually, I'd like to do something like:
                // Foreach (property in value) 
                // {
                //     If( value.property != DefaultButton.property) )
                //     {
                //         _button.property = value.property;
                //     }
                // }
                // This way users only have to update some of the properties
            }
        }
    }
}

Und jetzt die Anwendung, in der ich sie verwenden möchte:

<Window x:Class="TemplateCode.MainWindow"
    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"

    xmlns:templateCode="clr-namespace:TemplateCode"

    Title="MainWindow"
    Height="350"
    Width="525"
    Background="LimeGreen"
    DataContext="{Binding RelativeSource={RelativeSource Self}}" >

    <Grid>
        <templateCode:Template>
            <templateCode:Template.MyButton>

                <Button Background="Yellow" 
                    Content="Actual Button"
                    Width="200" 
                    Height="100"/>

            </templateCode:Template.MyButton>
        </templateCode:Template>
    </Grid>
</Window>

Und jetzt der Code dahinter:

Using System.Windows;
Namespace TemplateCode
{
    Public partial class MainWindow : Window
    {
        Public MainWindow()
        {
            InitializeComponent();
        }
    }
}

Bearbeiten Während ich unnötige Abhängigkeitseigenschaften im @ entfernen möchVorlag userControl, ich möchte immer noch Bindungen auf dem @ setzTast 's Eigenschaften aus der XAML.

Antworten auf die Frage(12)

Ihre Antwort auf die Frage