WPF: Невидимый контроль (?) - PullRequest
2 голосов
/ 13 апреля 2011

Я пытаюсь понять, почему элемент управления WPF или производные от него элементы управления не видны никогда:

Скажем, у нас есть следующее:

<Window x:Class="WpfApplication13.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:my="clr-namespace:WpfApplication13"
        Title="MainWindow" Height="350" Width="525">

    <DockPanel Name="dockPanel1" Background="LightBlue">

        <Canvas DockPanel.Dock="Left" ToolTip="tt one" Width="200" Background="Blue">
            <Control Background="Red" ToolTip="tt control" BorderBrush="Red" BorderThickness="5" Width="50" Height="100"></Control>
        </Canvas>

        <Button Content="two" DockPanel.Dock="Left" ToolTip="tt two" ></Button>
        <!--<my:MyControl Background="Red" ToolTip="tt hello" BorderBrush="Red" BorderThickness="5"></my:MyControl>-->

        <Control Background="Red" ToolTip="tt hello" BorderBrush="Red" BorderThickness="5"></Control>
    </DockPanel>
</Window>

Любое присутствиеуказанные элементы управления - любая граница, любая подсказка, любой фон не обнаружен.

Почему это так и как сделать элементы управления видимыми?

Ответы [ 3 ]

4 голосов
/ 13 апреля 2011

Класс Control является базовым классом для элементов управления, которые можно шаблонизировать, но он не определяет сам шаблон. А элемент управления без шаблона не имеет визуального дерева, поэтому он не отображается.

2 голосов
/ 13 апреля 2011

Я думаю, что отключение такого элемента управления в XAML ничего не значит, так как не представляет собой что-то визуальное.

Вам необходимо определить шаблон для этого элемента управления и для элементов управления внутри, связать их свойство с TemplateBinding.

что-то вроде этого:

        <Canvas DockPanel.Dock="Left" ToolTip="tt one" Width="200" Background="Blue">
        <Control Background="Red" ToolTip="tt control" BorderBrush="Red" BorderThickness="5" Width="50" Height="100">
            <Control.Template>
                <ControlTemplate>
                    <TextBlock Text="Hello" Background="{TemplateBinding Background}"/>
                </ControlTemplate>
            </Control.Template>
        </Control>
    </Canvas>
0 голосов
/ 13 апреля 2011

Найдены некоторые объяснения от MSDN:

A Control, у которого нет ControlTemplate, не отображается в вашем приложении, и установка следующих свойств не действует, если толькоControlTemplate ссылается на них явно:

  • Фон
  • BorderBrush
  • BorderThickness
  • FontFamily
  • FontSize
  • FontStretch
  • FontWeight
  • Foreground
  • HorizontalContentAlignment
  • VerticalContentAlignment

Обычный способ использования этих свойств - привязатьэлемент в ControlTemplate для свойства.Например, если вы хотите, чтобы ваш элемент управления изменил цвет в соответствии со значением свойства Background, вы можете привязать некоторое свойство элемента в ControlTemplate к Background.Используйте Расширение Разметки TemplateBinding, чтобы связать свойства элемента управления с элементом в ControlTemplate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...