Как работают StyleTriggers? - PullRequest
0 голосов
/ 11 декабря 2010

Я определил следующие ресурсы:

    <DataTemplate x:Key="DragTemplate">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="40"></RowDefinition>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="auto"></ColumnDefinition>
            </Grid.ColumnDefinitions>

            <Label x:Name="DraggingSourceLabel" Content="{Binding Name}" BorderThickness="2" BorderBrush="White" Foreground="White" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Grid.Row="0" Grid.Column="0" FontSize="20"></Label>
        </Grid>
    </DataTemplate>

    <Style x:Key="CursorStyle" TargetType="{x:Type ContentControl}">
        <Setter Property="Opacity" Value="0.50"/>
        <Setter Property="Background" Value"Black"/>
        <Setter Property="ContentTemplate" Value="{StaticResource DragTemplate}" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ContentControl}">
                    <ContentPresenter 
                        Content="{TemplateBinding Content}" 
                        ContentTemplate="{TemplateBinding ContentTemplate}">
                    </ContentPresenter>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="Tag"  Value="DragEnter">
                <Setter Property="Opacity" Value="1.0"/>
                <Setter Property="Background" Value="Red"/>
            </Trigger>
        </Style.Triggers>
    </Style>

</s:SurfaceWindow.Resources>

Но, к сожалению, StyleTriggers работают не так, как я думал. Непрозрачность изменилась, но фон все тот же. Я также попробовал только с одним сеттером, но фон все еще не изменился:

<Style.Triggers>
                <Trigger Property="Tag"  Value="DragEnter">

                    <Setter Property="Background" Value="Red"/>
                </Trigger>
            </Style.Triggers>

В чем здесь проблема?

=== РЕДАКТИРОВАТЬ ===

Вот код, который я использую для получения ContentControl:

ContentControl cursorVisual = new ContentControl()
                {
                    Content = data,
                    Style = window.FindResource("CursorStyle") as Style

                };

                List<InputDevice> devices = new List<InputDevice>();
                devices.Add(e.Contact);


                ItemsControl dragSource = ItemsControl.ItemsControlFromItemContainer(draggedElement);

                bool startDragOkay = SurfaceDragDrop.BeginDragDrop(sender as Grid, draggedElement, cursorVisual, data, devices, DragDropEffects.Move);      

                if (startDragOkay)
                {
                    e.Handled = true;
                    //draggedElement.Visibility = Visibility.Hidden;
                }

1 Ответ

1 голос
/ 11 декабря 2010

Стиль не может установить Background, потому что это свойство, в отличие от Opacity, не существует в классе FrameworkElement . Свойства элемента Framework могут использоваться из коробки, но свойства элемента управления (такие как Background, BorderThickness, HorizontalContentAlignment) должны быть определены внутри шаблона.

Вот правильная версия, я добавил границу с фоном:

<ControlTemplate TargetType="{x:Type ContentControl}">
    <Border Background="{TemplateBinding Background}">
        <ContentPresenter
            Content="{TemplateBinding Content}" 
            ContentTemplate="{TemplateBinding ContentTemplate}">
        </ContentPresenter>
    </Border>
</ControlTemplate>
...