2017-03-16 1 views
0

Ich versuche, Schaltflächen mit kleinerer Trefferfläche zu erstellen, um Fehlbedienungen in einem industriellen Touchscreen-PC-Programm zu verhindern. Hier ist a sample, und nur the white area should response to touch and mouse operations.Wie erstellt man eine Schaltfläche mit einer kleineren Trefferfläche als in ihrem visuellen Bereich?

Ich habe versucht zu verwenden Control

<ControlTemplate x:Key="ButtonToTouch" TargetType="{x:Type Button}"> 
    <Grid> 
     <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}"/> 
     <Button Background="{x:Null}" BorderBrush="{x:Null}" FontSize="{TemplateBinding FontSize}" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"> 
      <Button.Content> 
       <Grid Margin="8" > 
        <ContentPresenter Content="{TemplateBinding Content}" HorizontalAlignment="Center" VerticalAlignment="Center" /> 
        <Rectangle Fill="Transparent" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/> 
       </Grid> 
      </Button.Content> 
     </Button> 
    </Grid> 
</ControlTemplate> 

Jetzt Maus eingeben Ereignis auf diese Weise funktioniert, aber es scheint, dass jedes sichtbare Pixel in der Schaltfläche Vorlage das Click-Ereignis auslösen können , also muss ich den Hintergrund des Rahmens auf null setzen und den Hintergrund irgendwo außerhalb der Vorlage festlegen.

Irgendwelche Vorschläge? Danke für jede Hilfe.

Antwort

0

Set IsHitTestVisible="False" auf Border. Mit 8 Rand auf Raster, 8px breiter Bereich wird keine Eingabe registrieren.

<ControlTemplate x:Key="ButtonToTouch" TargetType="{x:Type Button}"> 
    <Grid> 
     <Border BorderBrush="{TemplateBinding BorderBrush}" 
       IsHitTestVisible="False" 
       BorderThickness="{TemplateBinding BorderThickness}" 
       Background="{TemplateBinding Background}"/> 

     <Grid Margin="8"> 
      <ContentPresenter Content="{TemplateBinding Content}" HorizontalAlignment="Center" VerticalAlignment="Center" /> 
      <Rectangle Fill="Transparent" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/> 
     </Grid> 
    </Grid> 
</ControlTemplate> 
+0

Ich habe 'IsHitTestVisible = "False" 'auf Border in meinem Code hinzugefügt, und es funktioniert gut. Dann habe ich deine ausprobiert, es funktioniert aber alle Animationen auf MouseOver und Click sind fehlgeschlagen. Vielleicht brauche ich hier wirklich einen anderen Knopf. Danke für Ihre Hilfe. – foxsheep

+0

@foxsheep, Standard Schaltflächenvorlage enthält Vorlagenauslöser, die den Hintergrund ändern, wenn IsMouseOver = true oder IsPressed = true ist. In der ButtonToTouch-Vorlage fehlen diese Auslöser (normalerweise, wenn das Anpassen der Steuerelementvorlage auf sie von der Basisvorlage kopiert werden muss). – ASh

+0

Es funktioniert gut nach dem Hinzufügen von '', das ist viel direkter als das Hinzufügen einer anderen Taste. Danke noch einmal. – foxsheep

Verwandte Themen