2013-04-02 2 views
0

저는 WPF에 조금 익숙하지만 배경 이미지가있는 이미지 나 버튼 위에 툴팁을 넣으려고 할 때 문제가 있습니다. 기본적으로 내가하려는 것은 이미지가 실제로 존재하는 곳과 투명하지 않은 부분 만 툴팁에 표시하는 것입니다. 이는 버튼 또는 이미지가 저장되는 사각형을 사용하기 때문에 툴팁이 해당 영역 내에 표시되기 때문에 문제가됩니다. 여기 WPF 이미지 툴팁 가장자리 감지

는 예를 들어 버튼 (가난한 디자인을 무시하지만 난 당신에게 아이디어를 제공하기 위해 복잡한 형태를 필요)입니다/버튼 여기

Exmaple:1

이미지의 가장자리입니다

Exmaple:1

Printscreen에서 마우스를 캡처하지 못했지만 실제로 마우스가 도형 위로 마우스를 올려 놓지 않고 이미지 상자/버튼 영역 내에 있다고 상상해보십시오.

Exmaple:1 http://i1109.photobucket.com/albums/h426/Melkirth/Imagearea.png

<Button Height="160" Width="240" BorderThickness="0" Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}"> 
     <Button.Background> 
      <ImageBrush ImageSource="Images/Cloud1.png"></ImageBrush> 
     </Button.Background> 
     <Button.ToolTip> 
      <TextBlock Margin="10" FontSize="14">Click me to begin your test</TextBlock> 
     </Button.ToolTip> 
    </Button> 

답변

1

this answer to a similar question에서 촬영 내 실제 코드의 작은 예입니다

전문 이미지 클래스 :

public class OpaqueClickableImage : Image 
    { 
     protected override HitTestResult HitTestCore(PointHitTestParameters hitTestParameters) 
     { 
      var source = (BitmapSource)Source; 
      var x = (int)(hitTestParameters.HitPoint.X/ActualWidth * source.PixelWidth); 
      var y = (int)(hitTestParameters.HitPoint.Y/ActualHeight * source.PixelHeight); 
      var pixels = new byte[4]; 
      source.CopyPixels(new Int32Rect(x, y, 1, 1), pixels, 4, 0); 
      if (pixels[3] < 10) return null; 
      return new PointHitTestResult(this, hitTestParameters.HitPoint); 
     } 
    } 

XAML :

<Window x:Class="MiscSamples.ImageButton" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:MiscSamples" 
     Title="ImageButton" Height="300" Width="300"> 
    <Grid Background="Green"> 
     <Button VerticalAlignment="Center" HorizontalAlignment="Center" 
       ToolTip="Hello!!"> 
      <Button.Template> 
       <ControlTemplate> 
        <local:OpaqueClickableImage Source="./Resources/SomeImage.png"/> 
       </ControlTemplate> 
      </Button.Template> 
     </Button> 
    </Grid> 
</Window> 

이렇게하면 마우스가 이미지의 불투명 한 영역 위에있을 때만 툴팁이 표시됩니다.

+0

이것은 정확히 내가 원했던 것입니다. – Melky