Изменить самую популярную область

Представьте, что я применил этот эллипс к ControlTemplate стиля. (например: это будет использоваться для большого пальца ползунка)

<Ellipse x:Name="Ellipse" 
         Fill="#C0FFFFFF"
         Stroke="{StaticResource SpecialColor}"
         StrokeThickness="2"/>

Теперь, как только мышь соприкасается с этим эллипсом, этот элемент захватывается мышью. Как я могу изменить геометрию столкновения? Есть ли способ сделать это только для XAML?

Допустим, я хочу уменьшить область столкновения, чтобы, когда мышь находится в середине эллипса, она ее захватила.

Или, может быть, я хочу сделать область столкновения больше, чем размер эллипса, чтобы, когда мышь находится рядом с эллипсом, она захватила его.


person M.kazem Akhgary    schedule 20.01.2017    source источник
comment
Самый простой способ (только для XAML) — поместить эллипс немного большего (или меньшего) размера с Fill="Transparent" над ним. Прозрачный (в отличие от нулевого) действительно учитывается при проверке попадания.   -  person Manfred Radlwimmer    schedule 20.01.2017
comment
хорошее мнение, разместить фиктивный эллипс большего размера и прозрачного. а как насчет того, чтобы эллипс был меньше? если я заполню внешний эллипс какой-нибудь кистью, это будет учитываться при проверке попадания   -  person M.kazem Akhgary    schedule 20.01.2017
comment
Как указал Эрно в своем ответе, вам придется обрабатывать события мыши на прозрачном эллипсе. Думайте о своем текущем эллипсе как о декораторе, а о прозрачном — как о реальном.   -  person Manfred Radlwimmer    schedule 20.01.2017


Ответы (1)


Эти решения не изменяют проверку попадания эллипса, но в максимально возможной степени предоставляют решение XAML.

Сделать его больше можно, заключив эллипс в контейнер (сетку?) и назначив контейнеру прозрачный фон.

<Grid Background="Transparent">
    <Ellipse Margin="5" ... />
</Grid>

Сделать его меньше можно, добавив сверху меньшую геометрию, опять же с прозрачным фоном и отключив проверку попадания на эллипс (IsHitTestVisible = "False"

<Grid>
    <Ellipse IsHitTestVisible="False" ... />
    <Grid Background="Transparent" Width="5" Height="5" />
</Grid>

Важный:

  • вам нужно явно установить прозрачность фона.
  • оба решения не изменяют тест на попадание в Ellipse, но используют «приманку», поэтому вам придется реализовывать события, которые обрабатывают клики и т. д. на приманке, и заставлять их действовать в контейнере.
person Emond Erno    schedule 20.01.2017