Template.FindName не работает если Name задать в коде:
От: Jack128  
Дата: 15.02.19 09:22
Оценка:
Как видно из кода ниже имя я задаю в конструкторе MyScrollViewer, потом использую этот MyScrollViewer в ControlTemplat'e, но FindName возвращает null. Конструктор MyScrollViewer'а вызывается, Name нормально выставляет, а результата — нет.

Если задать Name в XAML'е код работает. Но мне нужно из C# кода.

    public class MyScrollViewer: ScrollViewer
    {
        public MyScrollViewer()
        {
            Name = "PART_ContentHost";
        }
    }
    public class MyTextBox: TextBox
    {
        public override void OnApplyTemplate()
        {
            base.OnApplyTemplate();
            var contentHost = Template.FindName("PART_ContentHost", this);
            if (contentHost == null)
                throw new Exception("Can not find PART_ContentHost");
        }
    }



<Window x:Class="WpfApp1.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:WpfApp1"        
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Grid.Resources>
            <ControlTemplate TargetType="local:MyTextBox" x:Key="TextBoxTemplate">
                <local:MyScrollViewer />
            </ControlTemplate>
        </Grid.Resources>
        <local:MyTextBox Template="{StaticResource TextBoxTemplate}" />
    </Grid>
</Window>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.