PDA

View Full Version : سوال: مشکل در تغییر ItemsPanelTemplate یک ListBox



رافعی مهدی
جمعه 01 مهر 1390, 20:02 عصر
با سلام

من یک CustomControl (بگیرید CC) دارم که از یک ContentControl ارث بری شده و شامل یه ScrollViewer میشه که یک ContentPresenter رو دربر گرفته. وقتی یک ListBox رو در CC قرار میدم بدون هیچ مشکلی کار میکنه، اما وقتی ItemsPanelTemplate این ListBox رو عوض میکنم، باعث میشه که دیگر با تغییر آیتم انتخاب شده در ListBox به صورت خودکار اسکرول صورت نگیره. علت بروز این مشکل چیه؟

متوجه شدم که فقط وقتی HorizontalScrollBarVisibility یا VerticalScrollBarVisibility رو معادل Hidden قرار میدم و همزمان ItemsPanelTemplate مربوط به ListBox رو عوض میکنم، با این مشکل مواجه میشم. (من به مخفی کردن اسکرول بار در CC نیاز دارم.)

تعجب من از اینه که اگر مخفی کردن ScrollBars از اطلاع رسانی محتویات ScrollViewer به اون به منظور نمایش خودکار آیتم انتخاب شده جلوگیری میکند، چرا این مشکل هنگامی که ItemsPanelTemplate رو تغییر نمیدم به وجود نمیاد؟؟؟

Generic.xaml:

<ResourceDictionary ...>
<Style TargetType="{x:Type local:CustomControl1}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:CustomControl1}">
<Border ...>
<ScrollViewer ...
CanContentScroll="True"
HorizontalScrollBarVisibility="Hidden" « PROBLEM
VerticalScrollBarVisibility="Hidden"> «

<ContentPresenter Content="{TemplateBinding Content}"/>

</ScrollViewer>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>


MainWindow.xaml:

<Window x:Class="MyNamespace1.MainWindow"
...
xmlns:proj="clr-namespace:MyNamespace0;assembly=...">
<Grid>
<proj:CustomControl1 x:Name="CC">
<ListBox>
<ListBox.ItemsPanel> «
<ItemsPanelTemplate> «
<StackPanel Orientation="Horizontal"/> « PROBLEM
</ItemsPanelTemplate> «
</ListBox.ItemsPanel> «

<!--content goes here-->

</ListBox>
</proj:CustomControl1>
</Grid>
</Window>

_______
پاورقی:
این سوال رو به پیشنهاد دوست خوبمان epsi1on (http://barnamenevis.org/member.php?80142-epsi1on) که قبلاً در اینجا (http://stackoverflow.com/questions/7512748/changing-listbox-itemspaneltemplate-has-gotten-me-into-trouble) پرسیده بودم در برنامه نویس هم مطرح کردم.