Jak widziałem, wiele osób borykało się z tym problemem, ale nie mogę zrozumieć, dlaczego moja sprawa nie działa i zaczyna mnie to doprowadzać do szału.Stylizacja obiektu Textblock utworzonego w programie ContentPresenter
Kontekst: Mam DataGrid
, który ma być barwiony zgodnie z wartościami każdej komórki. W związku z tym mam styl dynamiczny rozwiązujący rzeczywisty szablon, który ma być używany dla każdej komórki. Tła działają teraz odpowiednio.
Nowy problem: gdy mam ciemne tło, chcę, aby kolor czcionki był biały, a grubość czcionki była pogrubiona, aby tekst był poprawnie czytelny. I ... Nie potrafię tego poprawnie zaprojektować.
Czytałem kilka StackOverflow posty o tym:
This one fits my problem but doesn't provide me any working solution This one is also clear and detail but... duh This is almost the same problem as me but... Solution does not work
Oto, co starałem dotąd:
<!-- Green template-->
<ControlTemplate x:Key="Green" TargetType="{x:Type tk:DataGridCell}">
<Grid Background="Green">
<ContentPresenter
HorizontalAlignment="Center"
VerticalAlignment="Center">
<ContentPresenter.Resources>
<Style BasedOn="{StaticResource BoldCellStyle}" TargetType="{x:Type TextBlock}" />
</ContentPresenter.Resources>
</ContentPresenter>
</Grid>
</ControlTemplate>
nie działa. Tło jest zielone, ale tekst pozostaje czarny i nie jest pogrubiony.
BTW, BoldCellStyle jest tak proste, jak to tylko możliwe:
<Style x:Key="BoldCellStyle" TargetType="{x:Type TextBlock}">
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Foreground" Value="White" />
</Style>
Ok. Druga próba (która jest prawdziwym głupi jeden, ale dobrze ...)
<!-- Green template -->
<ControlTemplate x:Key="Green" TargetType="{x:Type tk:DataGridCell}">
<Grid Background="Green">
<ContentPresenter
HorizontalAlignment="Center"
VerticalAlignment="Center">
<ContentPresenter.Resources>
<Style x:Key="BoldCellStyle" TargetType="{x:Type TextBlock}">
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Foreground" Value="White" />
</Style>
</ContentPresenter.Resources>
</ContentPresenter>
</Grid>
</ControlTemplate>
nie działa albo.
Następnie Próbowałem grać z właściwościom ContentPresenter
„s:
<!-- Green template -->
<ControlTemplate x:Key="Green" TargetType="{x:Type tk:DataGridCell}">
<Grid Background="Green">
<ContentPresenter TextElement.FontWeight="Bold" TextElement.Foreground="White" TextBlock.Foreground="White"
HorizontalAlignment="Center"
VerticalAlignment="Center" />
</Grid>
</ControlTemplate>
I ... Jak można się spodziewać, to nawet nie działa.
Zaintrygowany, użyłem Snoop do przeglądania wszystkich składników mojego interfejsu. W pierwszych dwóch przypadkach Snoop pokazuje mi, że każda komórka to Grid
z ContentPresenter
zawierającą TextBlock
i rzeczywistą Style
, ale ... Właściwości TextBlock
nie mają zastosowania, a FontWeight
jest nadal normalny.
Ostatni przypadek, jeszcze bardziej szokujące, widzę, że Snoop pokazuje mi, że faktycznie mamy ContentPresenter
z odpowiednimi właściwościami (tj TextElement.FontWeight="Bold"
), ale wygenerowany automatycznie TextBlock
mocy jest - jeszcze - nie stylem.
Nie mogę dostać tego, czego tu brakuje. Próbowałem, jak widać, prawie wszystko, co mogłem zrobić tutaj, i TextBlock
s nadal nie są sformatowane.
Masz pomysł? Dzięki jeszcze raz!
Wow. Czy jestem do tego absolutnie zmuszony? Głównym celem mojej pracy jest stylizacja każdej komórki osobno (niektóre z nich są odważne, inne są normalne). – Damascus
@Damaszek: Tak, o ile wiem. Nadal możesz używać tego samego stylu, musisz tylko zastosować go do każdej kolumny. –
Próbowałem go i to "działa" (tak, ustawia wszystkie moje komórki na pogrubione), spróbuję grać z wyzwalaczami, aby to zrobić:/ – Damascus