Das sieht wirklich wie ein seltsamer Fehler für mich aus, es sei denn jemand hat eine bessere Erklärung für dieses Verhalten.
ScrollViewer
(PART_ContentHost) verwendet intern ein Template
wie:
<ControlTemplate TargetType="{x:Type ScrollViewer}">
<Grid x:Name="Grid"
Background="{TemplateBinding Background}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Rectangle x:Name="Corner"
Grid.Row="1"
Grid.Column="1"
Fill="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" />
<ScrollContentPresenter x:Name="PART_ScrollContentPresenter"
Grid.Row="0"
Grid.Column="0"
Margin="{TemplateBinding Padding}"
CanContentScroll="{TemplateBinding CanContentScroll}"
CanHorizontallyScroll="False"
CanVerticallyScroll="False"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}" />
<ScrollBar x:Name="PART_VerticalScrollBar"
Grid.Row="0"
Grid.Column="1"
AutomationProperties.AutomationId="VerticalScrollBar"
Cursor="Arrow"
Maximum="{TemplateBinding ScrollableHeight}"
Minimum="0"
ViewportSize="{TemplateBinding ViewportHeight}"
Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"
Value="{Binding VerticalOffset,
Mode=OneWay,
RelativeSource={RelativeSource TemplatedParent}}" />
<ScrollBar x:Name="PART_HorizontalScrollBar"
Grid.Row="1"
Grid.Column="0"
AutomationProperties.AutomationId="HorizontalScrollBar"
Cursor="Arrow"
Maximum="{TemplateBinding ScrollableWidth}"
Minimum="0"
Orientation="Horizontal"
ViewportSize="{TemplateBinding ViewportWidth}"
Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"
Value="{Binding HorizontalOffset,
Mode=OneWay,
RelativeSource={RelativeSource TemplatedParent}}" />
</Grid>
</ControlTemplate>
Das interessante Bit ist:
<ScrollContentPresenter x:Name="PART_ScrollContentPresenter"
Grid.Row="0"
Grid.Column="0"
Margin="{TemplateBinding Padding}"
CanContentScroll="{TemplateBinding CanContentScroll}"
CanHorizontallyScroll="False"
CanVerticallyScroll="False"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}" />
Jetzt ist Ihr Problem zu beheben Sie nur die Margin 0 bis dort einstellen können statt {TemplateBinding Padding}
und Sie erhalten Ihre gewünschte Ausgabe.
Aber warum mussten wir das tun?
TemplateBinding Padding
scheint den Wert auf den ScrollViewer
direkt eingestellt ignoriert werden, die in dem inneren Umfang und nehmen den Padding-Wert aus dem Elternteil vererbt (Button
), die 15. ist
Ok, das ist seltsam, aber was noch schlimmer ist, Es ist nur für Padding. Foreground
, Background
, Margin
sind alle in Ordnung, wenn sie direkt auf ScrollViewer
setzen, überschreiben sie die TextBox
Felder. Ich selbst zu bestätigen, bewegte das Padding
Set direkt auf die TextBox
im Einsatz zu einem Standard-Style-Setter, um zu sehen, ob einige Präzedenzfall das Problem war.
Es schien nicht zu sein. Habe den gleichen Ausgang.
Padding ist in definiert, die die gleiche Klasse ist Vordergrund und Hintergrund sind davon ScrollViewer
erbt. Nicht sicher, warum Padding sich anders verhält.
ich auch versucht, den Vortragenden zu so etwas wie
Wechsel
<ScrollContentPresenter x:Name="PART_ScrollContentPresenter"
Grid.Row="0"
Grid.Column="0"
Margin="{TemplateBinding Margin}"
CanContentScroll="{TemplateBinding CanContentScroll}"
CanHorizontallyScroll="False"
CanVerticallyScroll="False"
Content="{TemplateBinding Padding}"
ContentTemplate="{TemplateBinding ContentTemplate}" />
Es Druck ist 15,15,15,15. Tut das nicht für die Margin
.
Gleicher Effekt mit einer {Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ScrollViewer}}, Path=Padding}
Bindung.
Ich sah einen Beitrag sagen, dass ScrollViewer
Eigenschaften auf es nicht zu seinen Kindern übergeben wird.Nicht wirklich, dass, wenn das der Fall war, wie Background
, Margin
und Arten in Ordnung sein könnten, um zu überfahren? Was ist so besonders an Padding
? Wenn es gültiges Verhalten ist, sehe ich nicht wirklich, wie man dieses Verhalten loswerden kann, ohne die ScrollViewer
Templating auch, und es ist eine verwirrende Implementierung.
Vielen Dank für die detaillierte und gut getestete Antwort! Ich schätze die Eingaben und Informationen zur Scrollviewer-Vorlage. Das ist sicher ein seltsamer Fall, der mir wenig Sinn macht. –