Benutzer mit den meisten Antworten
Hintergrund und Text vom ListView sollen trotz IsEnabled = false nicht grau sein

Frage
-
Hallo,
ich setze das Control ListView ein. Der Anwender soll nur informiert werden und soll keine Änderungen oder Auswahl vornehmen können.
Deshalb habe ich IsEnabled = False gesetzt.
Die Schrift soll aber schwarz und der Hintergrund transparent sein.
Deshalb habe ich einen Style definiert, der die notwendigen Eigenschaften setzen soll.<Style.Setters>
<Setter Property="IsEnabled" Value="False" />
<Setter Property="Background" Value="Transparent" />
<Setter Property="Foreground" Value="Black" />
</Style.Setters>ListView ist danach nicht enabled, aber der ListView-Hintergrund und die Schrift trotzdem grau.
Wie komme ich zum Ziel?
Alexander
Antworten
-
Hallo Alexander,
da wirst du ,denke ich, nicht drumrum kommen, einen eigenen Style zu erstellen, den du der ListView dann zuweist. Ich hab dir mal ein Beispiel gemacht:
<Window.Resources> <Style x:Key="EnabledLookStyle" TargetType="{x:Type ListView}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="ListView"> <Border Name="Border" Background="White" BorderBrush="LightGray" BorderThickness="1"> <ScrollViewer Style="{DynamicResource {x:Static GridView.GridViewScrollViewerStyleKey}}"> <ItemsPresenter /> </ScrollViewer> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style> </Window.Resources> <ListView Style="{StaticResource EnabledLookStyle}"> <ListViewItem>Item One</ListViewItem> <ListViewItem >Item Two</ListViewItem> <ListViewItem IsSelected="True">And Three</ListViewItem> </ListView>
Eventuell kannst es dann mit auch mit Triggern versehen. z.B.
<ControlTemplate.Triggers> <Trigger Property="IsEnabled" Value="false"> <Setter TargetName="Border" Property="Background" Value="White" /> <Setter TargetName="Border" Property="BorderBrush" Value="Gray" /> <Setter Property="Foreground" Value="Gray" /> </Trigger> <Trigger Property="IsGrouping" Value="true"> <Setter Property="ScrollViewer.CanContentScroll" Value="false"/> </Trigger> </ControlTemplate.Triggers>
DAbei wird ein einfaches Template im Style erzeugt, das einfach das vom Framework genutzte Style überschreibt.
Gruß Claudius
- Als Antwort markiert AlexanderRi Donnerstag, 19. November 2015 14:48
Alle Antworten
-
Hallo Alexander,
da wirst du ,denke ich, nicht drumrum kommen, einen eigenen Style zu erstellen, den du der ListView dann zuweist. Ich hab dir mal ein Beispiel gemacht:
<Window.Resources> <Style x:Key="EnabledLookStyle" TargetType="{x:Type ListView}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="ListView"> <Border Name="Border" Background="White" BorderBrush="LightGray" BorderThickness="1"> <ScrollViewer Style="{DynamicResource {x:Static GridView.GridViewScrollViewerStyleKey}}"> <ItemsPresenter /> </ScrollViewer> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style> </Window.Resources> <ListView Style="{StaticResource EnabledLookStyle}"> <ListViewItem>Item One</ListViewItem> <ListViewItem >Item Two</ListViewItem> <ListViewItem IsSelected="True">And Three</ListViewItem> </ListView>
Eventuell kannst es dann mit auch mit Triggern versehen. z.B.
<ControlTemplate.Triggers> <Trigger Property="IsEnabled" Value="false"> <Setter TargetName="Border" Property="Background" Value="White" /> <Setter TargetName="Border" Property="BorderBrush" Value="Gray" /> <Setter Property="Foreground" Value="Gray" /> </Trigger> <Trigger Property="IsGrouping" Value="true"> <Setter Property="ScrollViewer.CanContentScroll" Value="false"/> </Trigger> </ControlTemplate.Triggers>
DAbei wird ein einfaches Template im Style erzeugt, das einfach das vom Framework genutzte Style überschreibt.
Gruß Claudius
- Als Antwort markiert AlexanderRi Donnerstag, 19. November 2015 14:48
-
Hallo Claudius,
danke für die Hilfe. Es funktioniert fast.
Leider sehe ich immer den ScrollViewer am oberen Rand der ListView; wie ein Header (grauer Balken ohne die Scrollbutton).
Dieser wird auch dann angezeigt, wenn keine Notwendigkeit zum Scrollen besteht.
Wenn der Inhalt Breite oder Höhe überschreitet, dann funktioniert der ScrollViewer.<ScrollViewer Style="{DynamicResource {x:Static GridView.GridViewScrollViewerStyleKey}}">
<ItemsPresenter IsEnabled="False" />
</ScrollViewer>Ohne <ScrollViewer ... /> auch kein grauer Balken am oberen Rand.
Wie kann ich den Balken am oberen Rand der ListView unsichtbar setzen, wenn keine Notwendigkeit besteht?
Alexander -
Hallo Alexander,
das ist recht einfach. Lösche einfach das Attribut
Style="{DynamicResource {x:Static GridView.GridViewScrollViewerStyleKey}}"
sodass es wiefolgt aussieht
<ScrollViewer> <ItemsPresenter /> </ScrollViewer>
Dann ist der Header weg.
Gruß Claudius