Laden...

[erledigt] WPF: Combobox Template - Thickness aus Form ans Template weitergeben

Erstellt von m.grauber vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.145 Views
M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 11 Jahren
[erledigt] WPF: Combobox Template - Thickness aus Form ans Template weitergeben

Hallo,

in <Application.Resources> habe ich u. a. folgendes Template für eine ComboBox erstellt:

Hier das Template für die eigentliche ComboBox:


<Style x:Key="{x:Type MyComboBox}" TargetType="{x:Type MyComboBox}">
...
<Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ComboBox}">
                        <Grid>
                           ...
<ToggleButton x:Name="ToggleButton" Template="{StaticResource ComboBoxToggleButton}" Grid.Column="2" Focusable="false" ClickMode="Press"
                                          IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"/>

Hier das Template für den von der ComboBox benötigten ToggleButton:


<ControlTemplate x:Key="ComboBoxToggleButton" TargetType="{x:Type ToggleButton}">
<Grid>
  ....
  <Border x:Name="Border" BorderThickness="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=BorderThickness}" 
   ...

Wenn ich nun eine ComboBox auf ein Fenster setze, klappt alles.

Wenn ich aber im Fenster für eine bestimmte Combobox die BorderThickness="5" setze, wird dies ignoriert. Ich möchte, dass die im Fenster bei der ComboBox eigegebene BorderThickness in das Template übergeben wird. Daher ist oben auch die Zeile "BorderThickness="{Binding RelativeSource..." drin.

Wie muss diese Zeile korrigiert werden?

Danke.

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]

5.658 Beiträge seit 2006
vor 11 Jahren

Hi m.grauber,

das RelativeSource={RelativeSource TemplatedParent} bezieht sich aber in dem Fall auf den ToogleButton, nicht auf die ComboBox. Wenn du die Strichstärke bei der ComboBox angeben, aber im ToggleButton anwenden willst, mußt du es auch im ControlTemplate der ComboBox an den ToggleButton weiterreichen. Eigentlich fehlt nur im ersten Codeabschnitt in der letzten Zeile ein zusätzliches BorderThickness="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=BorderThickness}".

Christian

Weeks of programming can save you hours of planning

M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 11 Jahren

Hallo Christian,

vielen Dank für die Hilfe! Darüber, dass das ein Control in einem anderen Control ist, habe ich auch schon nachgedacht. Ich dachte bisher aber immer "TemplatedParent" bezieht sich auf das gesamte ("äußere") Template.

Aber das "TemplatedParent" bezieht sich also nicht auf das gesamte ("äußere") angewandte Template sondern nur auf das jeweils übergeordnete?

Wenn es so ist, habe ich die von Dir beschriebene Zeile nochmals eingebaut:

Es kommt keine Fehlermeldung (es wird zumindest nichts angezeigt) aber ändern tut sich auch nichts. Ich leite so diesen Wert über die Combobox an den Toggle Button weiter?


<Style x:Key="{x:Type MyComboBox}" TargetType="{x:Type MyComboBox}">
...
<Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ComboBox}">
                        <Grid>
                           ...
<ToggleButton x:Name="ToggleButton" Template="{StaticResource ComboBoxToggleButton}" Grid.Column="2" Focusable="false" ClickMode="Press"
                                          IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" 
BorderThickness="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=BorderThickness}"/> 

Vielleicht muss ich noch etwas anderes beachten?
(Ich habs getestet: Die Weiterleitung an die Combobox klappt, die erneute Weiterleitung an den ToggleButton wird ignoriert)

Danke!

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]

5.658 Beiträge seit 2006
vor 11 Jahren

Hi m.grauber,

nach dem, was ich so erkennen kann, sollte es eigentlich funktionieren. Du kannst aber mal mit dem DataBindingDebugConverter nachschauen, ob die richtigen Werte an der richtigen Stelle auch weitergegeben werden. Ansonsten solltest du zuerst sicherstellen, daß keine DataBinding-Fehler im Ausgabefenster gemeldet werden.

Christian

Weeks of programming can save you hours of planning

M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 11 Jahren

Hallo Christian,

vollkommen richtig! Es läuft nun. Ich hatte wirklich Tomaten auf den Augen 8)

Nun ist mir auch die Weiterleitung klar geworden.

Tausend Dank nochmals! 👍

Grüße
Michael

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]