Пользовательский элемент управления с TextBox и Button не наследует стили от родительского - PullRequest
1 голос

Я создал пользовательский элемент управления с TextBox и кнопкой, но он не хочет использовать стиль родителя.Тем не менее, мой элемент управления имеет стиль родителя во время разработки, но во время выполнения стили исчезают.

Есть мой TextBoxButton.xaml

 <Style x:Key="{x:Type Common:TextBoxExtension}" TargetType="{x:Type Common:TextBoxExtension}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Common:TextBoxExtension}">
                <Border x:Name="border" 
                        Background="{TemplateBinding Background}" 
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}"
                        SnapsToDevicePixels="True">
                    <DockPanel>
                        <Button DockPanel.Dock="Right" Padding="-3.0" Margin="2"
                                Width="{Binding ActualHeight, RelativeSource={RelativeSource AncestorType={x:Type TextBoxBase},Mode=FindAncestor}}"
                                Content="..."
                                HorizontalContentAlignment="Center"
                                VerticalContentAlignment="Center"
                                Command="{TemplateBinding Command}"/>
                        <ScrollViewer Name="PART_ContentHost" Focusable="False"
                                      HorizontalScrollBarVisibility="Hidden"
                                      VerticalScrollBarVisibility="Hidden"/>
                    </DockPanel>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Также есть TextBoxExtension.cs

public class TextBoxExtension : TextBox
{
    static TextBoxExtension()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(TextBoxExtension), 
            new FrameworkPropertyMetadata(typeof(TextBoxExtension)));
    }

    public static readonly DependencyProperty CommandProperty = 
        DependencyProperty.Register("Command", typeof(ICommand), typeof(TextBoxExtension), 
        new PropertyMetadata(null));

    public ICommand Command
    {
        get { return (ICommand)GetValue(CommandProperty); }
        set { SetValue(CommandProperty, value); }
    }
}

Использование в окне

<Common:TextBoxExtension FontSize="14" Text="{Binding VaultPath, UpdateSourceTrigger=PropertyChanged}" Margin="5" Grid.Column="1" Grid.Row="2" />
<Common:TextBoxExtension FontSize="14" Command="{Binding SetLocalPath}" Text="{Binding LocalPath, UpdateSourceTrigger=PropertyChanged}" Margin="5" Grid.Column="1" Grid.Row="3" />

Что я ожидал получить

ExpectedImage

Что я получу, когдазапустите программу

RealResults

Хотите добавить, что кнопки работают

...