Chciałbym użyć <Image>
w mojej aplikacji WPF, która reaguje na kliknięcia myszą. Tylko zdarzenia "Mouse Up" i "Moue Down" są dostępne po wyjęciu z pudełka. Uważam to za dość szczególne. Czy istnieje sposób na rozszerzenie kontroli lub sposób użycia innej kontroli, aby dać ten sam efekt?Kontrola obrazu WPF z kliknięciem Event
Odpowiedz
Aby rozwinąć odpowiedź Shawna Mcleana, jedną z wielkich możliwości WPF jest możliwość wykorzystania zachowania kontrolki przy całkowitej zmianie wyglądu tej kontroli. Jeśli chcesz utworzyć obraz, który zachowuje się tak jak przycisk (wraz ze zdarzeniami kliknięcia, powiązaniem poleceń, domyślnym przypisaniem przycisków itp.), Możesz umieścić obraz w kontrolce przycisku i ponownie ustawić ten przycisk, aby usunąć przycisk "chrome". To da ci miłe API przycisku o pożądanym wyglądzie. Możesz ponownie użyć tego stylu, a to podejście zredukuje potrzebę tworzenia procedur obsługi zdarzeń w kodzie, jeśli masz polecenia związane z nowymi przyciskami graficznymi.
Tworzenie takiego stylu jest dość łatwe. Po prostu utwórz zasób nowego stylu z nazwanym kluczem w zasobie i przypisz ten zasób do właściwości Style swoich przycisków. Oto przykład wrzuciłem razem:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ButtonStyleTestApp.MainWindow"
x:Name="Window"
Title="MainWindow"
Width="640" Height="480">
<Window.Resources>
<Style x:Key="NoChromeButton" TargetType="{x:Type Button}">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Padding" Value="1"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid x:Name="Chrome" Background="{TemplateBinding Background}" SnapsToDevicePixels="true">
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="#ADADAD"/>
<Setter Property="Opacity" TargetName="Chrome" Value="0.5"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid x:Name="LayoutRoot" Background="#FF44494D">
<Button Style="{DynamicResource NoChromeButton}" Click="ButtonClicked" >
<Image Source="Desert.png" Stretch="None"/>
</Button>
</Grid>
</Window>
Użyj MouseUp. Nie można przejść do kontroli obrazu ani skupić się na niej, dzięki czemu jest to jedyny sposób, aby go kliknąć.
Inną opcją jest po prostu wstawienie obrazu do przycisku i usunięcie wszystkich stylów poprzez edycję szablonu sterowania, aby wyglądało jak zwykłe zdjęcie. W ten sposób możesz skupić się na nim za pomocą klawiatury.
Można użyć zestawu 4 ładowarki i 2 zmiennych logicznych:
logicznych:
- IsClicked
- IsEntered
kopiarki:
- OnMouseDown- zestawy IsClicked true;
- OnMouseEnter- sets Is Isnted true;
- OnMouseLeave - ustawia IsEntered false;
- OnMouseUp - if (IsClicked & & IsEntered) {/ Todo logiki /}, a następnie ustawia IsClicked false;
Ta konstrukcja implementuje funkcjonalność klasycznego kliknięcia.
- OnMouseLeave - również set isClicked to false; W przeciwnym razie możesz kliknąć myszką i zwolnić mysz. Następnie kliknij myszką i zwolnij przycisk myszy, aby wykonać kliknięcie.
- 1. WPF obrazu/Event Rendering
- 2. Kontrola użytkownika WPF Rodzic
- 3. WPF kontrola dziedziczenia
- 4. WPF MVVM anulować Window.Closing event
- 5. WPF StoryBoard.Completed event not fireing
- 6. Caliburn.Micro i Telerik Kontrola WPF
- 7. Kontrola chmury tagów dla WPF
- 8. Kontrola Eksploratora Windows dla WPF?
- 9. Kontrola przeglądarki WPF vs WinForm
- 10. Kliknięcie i przeciągnięcie myszy Event WPF
- 11. WPF: Adorner Hit Testing/MouseDown Event
- 12. Niestandardowa kontrola wpf nie została rozpoznana
- 13. WPF C strona kontrola # Użytkownik IsVisibleChanged wydarzenie
- 14. Kontrola użytkownika WPF rzuca wyjątek czasu projektowania
- 15. Wiązanie polecenia obrazu WPF
- 16. WPF ValidationRule Waliduj gdy kontrola jest ładowany
- 17. Która tabela/kontrola siatki w WPF?
- 18. Pokaż menu kontekstowe z krótkim kliknięciem, nie długim kliknięciem
- 19. Zasoby obrazu WPF
- 20. Powiększenie obrazu WPF
- 21. Czy istnieje kontrola kreatora w WPF?
- 22. Etykieta narzędzia a wyskakujące okienko (kontrola WPF)
- 23. Przeciąganie obrazu w WPF
- 24. Jak rozwinąć TreeView WPF za jednym kliknięciem pozycji
- 25. obciążenia styl kontrola z osobnym pliku w WPF
- 26. Transformacja współrzędnych z kontrolą obrazu do źródła obrazu w WPF
- 27. Chrome DevTools event event timing
- 28. Wpf - ścieżka względnego źródła obrazu
- 29. IO.Stream do obrazu w WPF
- 30. Wygładzanie krawędzi obrazu w WPF
Umieść obraz wewnątrz przycisku zgodnie z http://stackoverflow.com/questions/2720463/creating-a-clickable-image-in-wpf – LosManos
Spróbuj tego. – VivekDev