Benutzer mit den meisten Antworten
WPF Tooltip im Code ein und ausschalten

Frage
-
Hallo
Ich möchte in mein kleinen Programm dieses Tooltip als Hilfe benutzen.
Ich habe ein Window Form als Einstellungen wo man dort per Checkbox diese Tooltip (Hilfe Anzeigen) ein und ausschalten kann und diese in Programm Setting gespeichert wird.
Nun möchte ich in MainWindow_Loaded diese ToolTip auf False oder True setzen die für alle Controls gilt.
Ist das möglich? und wie macht man das?
Danke im voraus.
Antworten
-
Hi,
IsMinimized und Margin kann man beispielsweise so verknüpfen:<CheckBox x:Name="cb" Content="Ribbon Minimized On/Off"/> … <Ribbon x:Name="Ribbon1" Height="140" VerticalAlignment="Top" IsMinimized="{Binding IsChecked, ElementName=cb}"> <Ribbon.Style> <Style TargetType="Ribbon"> <Setter Property="Margin" Value="0 45 0 0"/> <Style.Triggers> <Trigger Property="IsMinimized" Value="True"> <Setter Property="Margin" Value="0 140 0 0"/> </Trigger> </Style.Triggers> </Style> </Ribbon.Style> <Ribbon.ApplicationMenu> ...
--
Best Regards / Viele Grüße
Peter Fleischer (former MVP for Developer Technologies)
Homepage, Tipps, Tricks- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 6. April 2020 08:04
- Als Antwort markiert Mattes80 Sonntag, 12. April 2020 08:16
Alle Antworten
-
Hi,
nutze einfach die Active-Eigenschaft des ToolTips:Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load ToolTip1.Active = True ' oder False End Sub
--
Best Regards / Viele Grüße
Peter Fleischer (former MVP for Developer Technologies)
Homepage, Tipps, Tricks -
Hi,
da du nicht im WPF Forum postest, bin ich davon ausgegangen, dass du Windows Forms meinst.In WPF kanns du das so machen:
<StackPanel> <CheckBox x:Name="cb" Content="ToolTip Visibility"/> <TextBlock Text="Info" ToolTip="ToolTip Info" ToolTipService.IsEnabled="{Binding IsChecked, ElementName=cb}" /> </StackPanel>
--
Best Regards / Viele Grüße
Peter Fleischer (former MVP for Developer Technologies)
Homepage, Tipps, Tricks -
Hi,
hier mal ein Beispiel in VB.NET mit dem MVVM Entwurfsmuster. Mit dem Button wird die Eigenschaft "SwitchOnOff" wechselseitig true/false gesetzt. Die Eigenschaft "SwitchOnOff" ist in der Oberfläche an die IsOn-Eigenschaft des UserControls gebunden. Über INotifyPropertyChanged wird die Änderung des Wertes der Eigenschaft "SwitchOnOff" an die Obfläche gemeldet, die sich dann den neuen Wert holt und die Anzeige aller davon betroffenen Steuerelemente aktualisiert.XAML:
<Window x:Class="Window96" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApp1" xmlns:uc="clr-namespace:WpfControlLibrary1;assembly=WpfControlLibrary1" mc:Ignorable="d" Title="Window96" Height="450" Width="800"> <Window.DataContext> <local:Window96VM/> </Window.DataContext> <StackPanel> <Button Content="Set ON/OFF IsOn" Command="{Binding Cmd}"/> <uc:Window96UC1 IsOn="{Binding SwitchOnOff}"/> </StackPanel> </Window>
Und der ViewModel:
Imports System.ComponentModel Imports System.Runtime.CompilerServices Public Class Window96VM Implements INotifyPropertyChanged Public Property SwitchOnOff As Boolean Public ReadOnly Property Cmd As ICommand = New RelayCommand(Sub(state) SwitchOnOff = Not SwitchOnOff OnPropChanged(NameOf(SwitchOnOff)) End Sub) Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged Private Sub OnPropChanged(<CallerMemberName> Optional propName As String = "") RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName)) End Sub End Class
--
Best Regards / Viele Grüße
Peter Fleischer (former MVP for Developer Technologies)
Homepage, Tipps, Tricks- Bearbeitet Peter Fleischer Dienstag, 31. März 2020 08:45
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 6. April 2020 08:04
-
Hallo
Danke für dieses Beispiel hab wieder was dazugelernt.
Wie ist es aber wenn ich es in my.Setting es Speichere
Ist Tooltip als True gespeichert solles auf True gesetzt sein und wenn es ToolTip auf False gespeichert ist es auf False.
Darum hatte ich gefragt wie man es mit True und False diese ein und ausschalten kann.
werde das möglich?
-
Hi,
du kannst über Setting im Projekt eine Eigenschaft anlegen (z.B. "SwitchOnOff als Boolean), die dann im Programm genutzt werden kann. Der ViewModel in meinem vorherigen Beispiel kann dann so aussehen:Imports System.ComponentModel Imports System.Runtime.CompilerServices Public Class Window96VM Implements INotifyPropertyChanged Public Property SwitchOnOff As Boolean Get Return My.Settings.SwitchOnOff End Get Set(value As Boolean) My.Settings.SwitchOnOff = value My.Settings.Save() OnPropChanged() End Set End Property Public ReadOnly Property Cmd As ICommand = New RelayCommand(Sub(state) SwitchOnOff = Not SwitchOnOff End Sub) Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged Private Sub OnPropChanged(<CallerMemberName> Optional propName As String = "") RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName)) End Sub End Class
--
Best Regards / Viele Grüße
Peter Fleischer (former MVP for Developer Technologies)
Homepage, Tipps, Tricks- Bearbeitet Peter Fleischer Mittwoch, 1. April 2020 14:40
-
Hallo
Ich versteh diesen Code irgendwie nicht. Mir ist es nicht ersichtlich das er nur diesen ToolTip aus oder einschaltet.
Ich möchte in MainWindow_Loaded diese Abfrage
If hilfe="true" then
else
end if
gibt es kein einfachen weg diesen Tooltip ein oder auszuschalten?
-
Hi,
da du bisher nicht geschrieben hast, welche konkrete Technologie du nutzt, habe ich dir den einfachsten Weg gezeigt:1. Im Code gibt es eine Eigenschaft, die die Settings bereitstellt und bei Änderung auch wieder abspeichert.
2. In der Oberfläche ist die Eigenschaft des UserControls an diese Eigenschaft gebunden.
3. Damit die Oberfläche mitbekommt, dass sich der Wert der gebundenen Eigenschaft geändert hat, wird in der Eigenschaft INotifyPropertyChanged genutzt.
Ich vermute mal, du arbeitest klassisch im CodeBehind im Mix von Oberflächendesign und Programmlogik wie in den Anfängen vor OOP. Da diese Arbeitsweise umständlich, schwer wartbar und auch nicht einfach testbar ist, habe ich mich schon lange davon verabschiedet. Das solltest du vielleicht auch in Betracht ziehen.
--
Best Regards / Viele Grüße
Peter Fleischer (former MVP for Developer Technologies)
Homepage, Tipps, Tricks -
Ich hatte damals GWBasic gelernt, bin dann auf QBasic ist ja fast das gleiche, dann auf Visual Basic 6.0 das war schon eine Umstellung von VB 6.0 war es dann Visual Basic.net des war wieder eine sehr große Umstellung jetzt möchte ich noch so gut wie es geht mit WPF es machen.
Hier schon man mein Code
xaml
<RibbonWindow x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApp8" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Grid> <Ribbon x:Name="Ribbon1" Height="140" VerticalAlignment="Top"> <Ribbon.ApplicationMenu> <RibbonApplicationMenu x:Name="Ribbon_Menu" LargeImageSource="Images/Ribbon/Ribbon_Menu.png" SmallImageSource="Images/Ribbon/Ribbon_Menu.png"> <RibbonApplicationMenu.FooterPaneContent> <RibbonButton x:Name="Ribbon_Menu_Beenden" Label="Beenden" SmallImageSource="Images/Ribbon/Exit_40.png" HorizontalAlignment="Right"/> </RibbonApplicationMenu.FooterPaneContent> <RibbonApplicationMenuItem x:Name="Ribbon_Menu_Einstellungen" Header="_Einstellungen" ImageSource="Images/Ribbon/Einstellung.png"/> </RibbonApplicationMenu> </Ribbon.ApplicationMenu> <Ribbon.HelpPaneContent> <RibbonButton x:Name="Ribbon_Klappen" Content="Klappen" SmallImageSource="Images/Ribbon/Ribbon_Pfeiloben.png"/> </Ribbon.HelpPaneContent> <RibbonTab x:Name="Ribbon_Tab_Start" Header="_Start"> <RibbonGroup x:Name="Ribbon_Tab_Start_Gruppe_Test" Header="_Test" Height="88" Margin="0" VerticalAlignment="Top" Width="258"> <RibbonButton x:Name="RibbonButton_UEbersicht" Content="RibbonButton" HorizontalAlignment="Left" Height="59" Margin="0,5,-71,-60" VerticalAlignment="Top" Width="75" Label="_Übersicht" LargeImageSource="Images/Ribbon/UEbersicht_40.png" ToolTipTitle="ist ein Titel" ToolTipDescription="das ist die Beschreibung" ToolTipImageSource="Images/Ribbon/UEbersicht_40.png" ToolTipFooterTitle="test Footer" ToolTipFooterDescription="Footer Beschreibung" ToolTipFooterImageSource="Images/Ribbon/Einstellung.png"/> </RibbonGroup> </RibbonTab> </Ribbon> </Grid> </RibbonWindow>
VB Code
Class MainWindow Private Sub Ribbon_Klappen_Click(sender As Object, e As RoutedEventArgs) Handles Ribbon_Klappen.Click If Ribbon1.IsMinimized = False Then Ribbon1.IsMinimized = True DockingManager1.Margin = New Thickness(0, 45, 0, 0) 'TODO: Hier muss sich das Bild verändern in RIBBON ' Ribbon_Klappen.SmallImageSource = New BitmapImage(New Uri("Images/Ribbon/Pfeiloben.png")) ElseIf Ribbon1.IsMinimized = True Then Ribbon1.IsMinimized = False DockingManager1.Margin = New Thickness(0, 140, 0, 0) ' Ribbon_Klappen.SmallImageSource = New BitmapImage(New Uri("Images/Ribbon/Pfeilunten.png")) End If End Sub Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded If Not System.IO.File.Exists("Einstellung.db") Then Dim dbErstellen As New Klasse_DB dbErstellen.Einstellung_DB_Erstellen() dbErstellen.Einstellung_DB_Allgemein_grundeinstellung() End If ' Me.SetValue(ToolTipService.IsEnabledProperty, False) ' ToolTipService.SetIsEnabled(ToolTip, False) End Sub Private Sub RibbonButton_UEbersicht_Click(sender As Object, e As RoutedEventArgs) Handles RibbonButton_UEbersicht.Click Dim Form1 = New AvalonDock.Layout.LayoutAnchorable Form1.Title = "Übersicht" Form1.CanHide = True Form1.CanClose = True Form1.ContentId = "Form1" Form1.IsSelected = True Form1.Content = MyControl myLayoutDocumentPane.Children.Add(Form1) End Sub Private Sub Ribbon_Menu_Einstellungen_Click(sender As Object, e As RoutedEventArgs) Handles Ribbon_Menu_Einstellungen.Click Dim Einstellungen_starten As New Einstellung_Hauptform Einstellungen_starten.Show() End Sub End Class
-
Hi,
und wo im Code wird das Ereignis die Sichtbarkeit des ToolTips gesetzt, geändert und gespeichert?Dein Code entspricht der alten in VB6 genutzten Technologie des Mischens von Design und Programmlogik. Da ist es sehr schwer, ein Problem zu beseitigen. Z.B. Ribbon1.IsMinimized und DockingManager1.Margin ist Design und sollte im XAML mit Style und Trigger gestaltet werden.
Für den Anfang kann man die Design-Abläufe auch im CodeBehind halten. Die Programmlogik sollte aber auch da schon in separate Objekte (Klassen) ausgelagert werden.
--
Best Regards / Viele Grüße
Peter Fleischer (former MVP for Developer Technologies)
Homepage, Tipps, Tricks -
Hi,
IsMinimized und Margin kann man beispielsweise so verknüpfen:<CheckBox x:Name="cb" Content="Ribbon Minimized On/Off"/> … <Ribbon x:Name="Ribbon1" Height="140" VerticalAlignment="Top" IsMinimized="{Binding IsChecked, ElementName=cb}"> <Ribbon.Style> <Style TargetType="Ribbon"> <Setter Property="Margin" Value="0 45 0 0"/> <Style.Triggers> <Trigger Property="IsMinimized" Value="True"> <Setter Property="Margin" Value="0 140 0 0"/> </Trigger> </Style.Triggers> </Style> </Ribbon.Style> <Ribbon.ApplicationMenu> ...
--
Best Regards / Viele Grüße
Peter Fleischer (former MVP for Developer Technologies)
Homepage, Tipps, Tricks- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 6. April 2020 08:04
- Als Antwort markiert Mattes80 Sonntag, 12. April 2020 08:16