2010-11-01 3 views
4

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

Этот код принадлежит к пользовательскому управлению «House» и отлично работает на дизайнере. Я могу выбрать объект «дом» и изменить свойство HouseType на сетке свойств и увидеть желаемый эффект. Но во время выполнения, если я изменяю одно и то же свойство, ничего не происходит!

<DrawingBrush x:Key="emptyHouseBrush"> 
    <DrawingBrush.Drawing> 
    <GeometryDrawing Geometry="M0,0 100,100 M0,100 100,0"> 
     <GeometryDrawing.Pen> 
     <Pen Brush="Black" /> 
     </GeometryDrawing.Pen> 
    </GeometryDrawing> 
    </DrawingBrush.Drawing> 
</DrawingBrush> 

<DataTemplate DataType="{x:Type m:House}"> 
    <Border x:Name="border" BorderThickness="2" > 
    <Grid x:Name="grid" > 

    </Grid> 
    </Border>  
    <DataTemplate.Triggers> 
    <DataTrigger Binding="{Binding Path=HouseType}" Value="Neutral"> 
     <Setter TargetName="border" Property="BorderBrush" Value="Black"/> 
    </DataTrigger> 
    <DataTrigger Binding="{Binding Path=HouseType}" Value="Forbidden"> 
     <Setter TargetName="border" Property="BorderBrush" Value="Black"/> 
     <Setter TargetName="grid" Property="Background" Value="{StaticResource ResourceKey=emptyHouseBrush}"/> 
    </DataTrigger> 
    <DataTrigger Binding="{Binding Path=HouseType}" Value="Borders"> 
     <Setter TargetName="border" Property="BorderBrush" Value="#FF7A6D34"/> 
    </DataTrigger> 
    <DataTrigger Binding="{Binding Path=HouseType}" Value="Homeland"> 
     <Setter TargetName="border" Property="BorderBrush" Value="#FFFFD200"/> 
     <Setter TargetName="border" Property="Background" Value="#54FBE681"/> 
    </DataTrigger> 

    <Trigger SourceName="border" Property="IsMouseOver" Value="True"> 
     <Setter TargetName="border" Property="Background" Value="#645CAEF9"/> 
    </Trigger> 

    </DataTemplate.Triggers> 
</DataTemplate> 


</Control.Resources> 
    <ContentControl> 
    <m:House x:Name="house" HouseType="Neutral"></m:House> 
    </ContentControl> 

</UserControl> 

Я попытался с помощью свойства по умолчанию, свойство зависимостей, реализуя интерфейс IPropertyChanged, пытался переместить свойство контроля и повторяя все выше ... и до сих пор ничего.

Что мне не хватает? Как я могу изменить управление границей (и фоном) после изменения этого свойства?

Заранее спасибо.

Marcelo

ответ

0

Это выглядит хорошо для меня. Убедитесь, что объект House реализует INotifyPropertyChanged и вы вызываете PropertyChanged при обновлении свойства. Если он все еще не работает, посмотрите на окно вывода вывода. Обычно появляются ошибки привязки.

1

Код кажется мне хорошим. Хороший способ поиска этих ошибок - небольшая программа, которую я нахожу очень замечательной: Snoop.

http://snoopwpf.codeplex.com/Thread/View.aspx?ThreadId=207711

Просто взгляните на него, и, возможно, вы будете иметь возможность отслеживать обратно свою ошибку.

{наслаждаться}

1

Его, кажется, как вы путаете ControlTemplates с DataTemplates. DataTemplate используется для указания того, как должен отображаться определенный тип объекта данных, обычно он содержит несколько элементов управления, которые привязаны к значениям свойств объекта. Вы хотите изменить визуализацию управления по умолчанию, это лучше всего сделать с помощью ControlTemplate. Если вы хотите сохранить визуализацию элемента управления и просто добавить изменение цвета рамки, то вы можете использовать такой инструмент, как Blend, чтобы получить текущий элемент управления ControlTemplate из элемента управления House и настроить его, добавив триггеры.