Почему в WPF свойство Rectangle.Fill не работает при использовании TemplateBinding?

Я не могу понять, почему этот код XAML не работает. При использовании TemplateBinding (см. ниже) цвет фона не задан. Но когда я использую обычную цветовую строку (например, «красный»), она работает нормально.

<ControlTemplate x:Key="InstanceButtonTemplate" TargetType="{x:Type Control}">
    <Grid>
        <Rectangle>
            <Rectangle.Fill>
                <SolidColorBrush Color="{TemplateBinding Background}"></SolidColorBrush>
            </Rectangle.Fill>
        </Rectangle>
    </Grid>
</ControlTemplate>

Тем не менее, когда я использую TemplateBinding таким образом, он работает отлично...

<ControlTemplate x:Key="InstanceButtonTemplate" TargetType="{x:Type Control}">
    <Grid>
        <Rectangle Fill="{TemplateBinding Background}"></Rectangle>
    </Grid>
</ControlTemplate>

Любые идеи?

Редактировать: чтобы уточнить, я намерен расширить это, чтобы использовать градиентную кисть, поэтому мне нужно иметь возможность назначать свойство Rectangle.Fill с помощью XAML вместо обычная струна.


person willem    schedule 23.03.2009    source источник


Ответы (1)


Это потому, что цвет имеет другой тип, чем фон.

Фон - это кисть, цвет - это... хорошо цвет.. Вы можете использовать IValueConverter, чтобы преобразовать кисть в цвет..

ХТН

person Arcturus    schedule 23.03.2009
comment
Это была и моя мысль, но потом я увидел (используя intellisense), что фон (в элементе управления) на самом деле является кистью, а не цветом. - person willem; 23.03.2009
comment
@willemo, это именно то, что нужно. Фон — это кисть, а Rectangle.Fill — это кисть. Когда вы устанавливаете SolidColorBrush.Color для свойства Background, происходит сбой, потому что SolidColorBrush.Color — это Color, а Background — это Brush. Rectangle.Fill=Фон подходит... обе кисти. - person Rich; 23.03.2009
comment
Или напишите неприятную реализацию IValueConverter, которая может преобразовывать кисти в цвета... Однако вам нужно обрабатывать все виды кистей... больше информации о кистях здесь: msdn.microsoft.com/en-us/library/aa970904.aspx - person Arcturus; 23.03.2009