यह वास्तव में मेरे लिए एक अजीब बग जैसा दिखता है जब तक कि इस व्यवहार के लिए किसी के पास बेहतर स्पष्टीकरण न हो।
ScrollViewer
(PART_ContentHost) आंतरिक रूप से उपयोग करता है एक Template
की तरह:
<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>
दिलचस्प बिट है:
<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}" />
अब आपकी समस्या का समाधान करने के लिए आप बस के बजाय 0 के लिए वहाँ मार्जिन सेट कर सकते हैं {TemplateBinding Padding}
और आपको अपना वांछित आउटपुट मिल जाएगा।
लेकिन हमें ऐसा करने की आवश्यकता क्यों थी?
TemplateBinding Padding
ScrollViewer
जो आंतरिक दायरे में है और जनक से विरासत में मिली पैडिंग मूल्य उठाता पर सीधे सेट मूल्य अनदेखी किए जाने (Button
) जो 15
ठीक है कि अजीब है, लेकिन क्या बदतर है है लगता है यह केवल पैडिंग के लिए है। Foreground
, Background
, Margin
ScrollViewer
पर सीधे सेट होने पर ठीक है, वे TextBox
के फ़ील्ड को ओवरराइड करते हैं। मैं यह भी पुष्टि करने के लिए कि Padding
सीधे TextBox
पर डिफॉल्ट स्टाइल सेटर पर सेट करने के लिए सेट किया गया है, यह देखने के लिए कि कुछ प्राथमिकता समस्या समस्या थी या नहीं।
ऐसा प्रतीत नहीं होता था। एक ही आउटपुट मिला।
पैडिंग System.Windows.Controls.Control
में परिभाषित किया गया है जो एक ही कक्षा का अग्रभूमि है और पृष्ठभूमि ScrollViewer
विरासत से है। निश्चित नहीं है कि क्यों पैडिंग अकेले व्यवहार कर रहा है।
मैं भी
<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}" />
यह प्रिंट की 15,15,15,15 की तरह कुछ करने के लिए प्रस्तोता को बदलने की कोशिश की। Margin
के लिए ऐसा नहीं करता है।
{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ScrollViewer}}, Path=Padding}
बाइंडिंग के साथ समान प्रभाव।
मैंने एक पोस्ट देखा कि ScrollViewer
इसके बच्चों के लिए निर्धारित गुणों को पास नहीं करता है।वास्तव में ऐसा नहीं मिलता है क्योंकि अगर ऐसा होता है तो Background
, Margin
और किस तरह से सवारी करने के लिए ठीक हो? Padding
के बारे में इतना खास क्या है? यदि यह वैध व्यवहार है, तो मैं वास्तव में ScrollViewer
को टेम्पलेट किए बिना उस व्यवहार से छुटकारा पाने के लिए नहीं देखता हूं और यह एक भ्रमित कार्यान्वयन है।
विस्तृत और अच्छी तरह से परीक्षण किए गए उत्तर के लिए आपको बहुत बहुत धन्यवाद! मैं स्क्रॉलव्यूज़र टेम्पलेट के बारे में इनपुट और जानकारी की वास्तव में सराहना करता हूं। यह निश्चित रूप से एक अजीब मामला है, जो मुझे ज्यादा समझ में नहीं आता है। –