Como acessar botões dentro de um UserControl do xaml?

No trabalho, tenho várias páginas, cada uma com botões nos mesmos lugares e com as mesmas propriedades. Cada página também possui pequenas diferenças. Para isso, criamos um modelo userControl e colocamos todos os botões nele, depois aplicamos esse controle de usuário a todas as páginas. No entanto, agora é bastante difícil acessar os botões e modificá-los no xaml de cada página, porque eles estão dentro de um UserControl na página ...Como acesso elegantemente os botões de cada página?

O que eu tentei:

Atualmente, vinculamos a várias propriedades de dependência. Não gosto dessa opção porque tenho muitos botões e preciso controlar muitas propriedades desses botões. O resultado são centenas de propriedades de dependência e uma verdadeira bagunça para percorrer quando precisamos mudar alguma coisa.

Outro método é usar estilos. Eu gosto desse método geralmente, mas como esses botões estão dentro de outro controle, torna-se difícil modificá-los, e o modelo seria exatamente correto para um botão, ao mesmo tempo.

Adam Kemp postou sobre permitir que o usuário insira seu próprio botãoaqui, e este é o método que estou tentando implementar / modificar. Infelizmente, não tenho acesso ao Xamarin.

Embora o modeloé inserido quando o código é executado, o modelonão é atualizando o botão corretamente. Se eu colocar um ponto de interrupção no MyButton Setter, posso ver quevalor é na verdade um botão vazio, e não o que eu designei na minha janela principal. Como faço para corrigir isso?

Aqui está um código simplificado:

Meu modelo xaml de UserControl:

<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>

O meu modelo UserControl's Code Behind:

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
            }
        }
    }
}

E agora o aplicativo onde eu quero usá-lo:

<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>

E agora o código por trás:

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

Editar: Embora eu queira remover propriedades de dependência desnecessárias no diretóriomodelo userControl, eu ainda gostaria de definir ligações nobotãopropriedades do XAML.

questionAnswers(6)

yourAnswerToTheQuestion