Frage

Dies ist der nächste, dass ich einen einfachen Auslöser zur Schaffung dazu gekommen sind. Ich will nur das Datagrid der IsMouseOver == true den Knopf zeigen. Das Problem ist, dass die Setter des Target sagt: Die Eigenschaft ‚Targetname‘ kein gültiges Ziel für die ‚Setter‘ darstellen, da ein Element namens ‚ButtonExpand‘ wurde nicht gefunden. Stellen Sie sicher, dass das Ziel, bevor irgendwelche Setters, Trigger deklariert wird oder Bedingungen, die sie verwenden. Was mache ich falsch?

<UserControl.Resources>
    <Style TargetType="DataGrid">
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter TargetName="ButtonExpand" Property="Visibility" Value="Visible" />
            </Trigger>
        </Style.Triggers>
    </Style>
</UserControl.Resources>
<Grid>



    <DataGrid Name="MainDataGrid" ItemsSource="{Binding Programs}" IsReadOnly="True" AutoGenerateColumns="false" >
        <DataGrid.Columns>
            <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
            <DataGridTextColumn Header="Version" Binding="{Binding Version}"/>
            <DataGridTextColumn Header="Publisher" Binding="{Binding Publisher}"/>
        </DataGrid.Columns>
    </DataGrid>

    <Button Name="ButtonExpand" Height="25" Width="25" HorizontalAlignment="Right" VerticalAlignment="Bottom" Visibility="Hidden">+</Button>
</Grid>

War es hilfreich?

Lösung

  

Targetname ist nicht dafür bestimmt,   innerhalb des Triggers Sammlung von   ein Stil. Ein Stil hat keine   Namescope, so macht es keinen Sinn machen   beziehen sich auf Elemente mit Namen.   Aber eine Vorlage (entweder Datatemplate oder   Control) hat eine haben   Namescope.

Siehe dieser Link.

Sie können es umgekehrt mit einem Datatrigger für die Schaltfläche. Beachten Sie, dass Sie die Eigenschaft Sichtbarkeit im Stil für die Datatrigger zur Arbeit einstellen müssen.

<Grid Name="MainGrid"> 

    <DataGrid ItemsSource="{Binding Programs}"
              IsReadOnly="True"
              AutoGenerateColumns="false" > 
      <DataGrid.Columns> 
        <DataGridTextColumn Header="Name" Binding="{Binding Name}"/> 
        <DataGridTextColumn Header="Version" Binding="{Binding Version}"/> 
        <DataGridTextColumn Header="Publisher" Binding="{Binding Publisher}"/> 
      </DataGrid.Columns> 
    </DataGrid> 

    <Button Name="ButtonExpand"
            Height="25"
            Width="25"
            HorizontalAlignment="Right"
            VerticalAlignment="Bottom"
            Content="+">
        <Button.Style>
            <Style TargetType="Button">
                <Setter Property="Visibility" Value="Hidden"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=MainGrid,
                                                   Path=IsMouseOver}" 
                                 Value="True">
                        <Setter Property="Visibility" Value="Visible" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    </Button>
</Grid>

Eine andere Möglichkeit, es zu tun zu binden Sichtbarkeit ButtonExpand wäre die IsMouseOver Eigenschaft des Datagrid mit einem Konverter.

Andere Tipps

<Grid Name="MainGrid">

    <DataGrid ItemsSource="{Binding Programs}" IsReadOnly="True" AutoGenerateColumns="false" >
        <DataGrid.Columns>
            <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
            <DataGridTextColumn Header="Version" Binding="{Binding Version}"/>
            <DataGridTextColumn Header="Publisher" Binding="{Binding Publisher}"/>
        </DataGrid.Columns>
    </DataGrid>

    <Button Name="ButtonExpand" Margin="0,0,20,20" Height="25" Width="25" HorizontalAlignment="Right" VerticalAlignment="Bottom" Content="+">
        <Button.Style>
            <Style TargetType="Button">
                <Setter Property="Visibility" Value="Hidden"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=MainGrid,
                                           Path=IsMouseOver}" 
                         Value="True">
                        <Setter Property="Visibility" Value="Visible" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    </Button>

</Grid>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top