C# 使列表框中的项目溢出
船首有个溢流 如果有人知道我在这部分代码中犯了什么错误 我检查这个问题,但不是很好的答案 ListView也不起作用, 我将尝试使用ItemControl,但获取所选项目并不容易 也许是用Zindex?但也不管用C# 使列表框中的项目溢出,c#,.net,wpf,xaml,C#,.net,Wpf,Xaml,船首有个溢流 如果有人知道我在这部分代码中犯了什么错误 我检查这个问题,但不是很好的答案 ListView也不起作用, 我将尝试使用ItemControl,但获取所选项目并不容易 也许是用Zindex?但也不管用 假的 假的 真的 缩略图样式 这是缩略图用户控件 public部分类ThumbnailView:UserControl { #区域私人成员 私有只读ModalBehavioru ModalBehavior; 私有列表\u activeWindows; 私人词典(active)
假的
假的
真的
缩略图样式
这是缩略图用户控件
public部分类ThumbnailView:UserControl
{
#区域私人成员
私有只读ModalBehavioru ModalBehavior;
私有列表\u activeWindows;
私人词典(active);;
#端区
#区域公共财产
公共按钮
{
获取{返回this.btnOk;}
}
公共按钮取消
{
获取{返回this.btnCancel;}
}
#端区
私有void ok单击(对象发送方,RoutedEventArgs参数)
{
_SetModalBehaviorStatusOk();
}
私有void CancelClick(对象发送方、RoutedEventArgs参数)
{
_SetModalBehaviorStatusCancel();
}
公共缩略图视图(IEnumerable activeWindows)
{
初始化组件();
_activeWindows=新列表();
_活动=新字典();
_AddRange(activeWindows);
_modalBehavior=新的modalBehavior(本);
this.btnCancel.Focus();
//设置值(ScrollViewer.HorizontalScrollBarVisibilityProperty,ScrollBarVisibility.Disabled);
刷新单击();
}
私有void刷新单击()
{
var thumbs=新列表();
_active.Clear();
foreach(activeWindows中的var窗口)
{
var key=newwindowinterophelper(window.Handle);
拇指。添加(键);
如果(!\u活动。容器(键))
{
_激活。添加(键、窗口);
}
}
this.DataContext=拇指;
}
公共窗口显示ModalDialog()
{
var result=_modalBehavior.ShowModalDialog();
if(结果==ModalBehavior.ModalBehaviorStatus.Ok)
{
/*如果(ListBoxWindow!=null)
{
var selItems=ListBoxWindow.SelectedItems;
如果(selItems.Count>0)
{
var tt=(IntPtr)selfitems[0];
如果(_active.ContainsKey(tt))
{
返回激活[tt];
}
}
}*/
}
返回null;
}
}
代码中的问题是您重新定义了控件模板,但没有为ScrollViewer.HorizontalScrollBarVisibility
使用TemplateBinding
,这样设置ListBox
的属性不起作用:
<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled" ... />
您将其设置为Auto
。设置为禁用
或执行以下操作
<ScrollViewer HorizontalScrollBarVisibility="{TemplateBinding HorizontalScrollBarVisibility}" ...>
另一方面,如果要保持水平滚动,但防止项目溢出列表框之外,则可能需要选中ClipToBounds属性: 在列表框中设置它,并在ItemsPresenter中对其进行模板绑定,它应该可以阻止溢出(如果没有,请尝试在ItemsPanelTemplate的StackPanel中设置…)
我这样设置ItemsPresenter
<ScrollViewer HorizontalScrollBarVisibility="{TemplateBinding HorizontalScrollBarVisibility}" ...>
现在的结果是这样的
假设这是你的问题,可能是重复的。这对我不起作用。我已经试过了
ListBox Grid.Row=“0”Name=“ListBoxWindow”ItemsSource=“{Binding}”ItemTemplate=“{StaticResource Thumb}”ScrollViewer.HorizontalScrollBarVisibility=“Disabled”ScrollViewer.VerticalScrollBarVisibility=“Disabled”IsSynchronizedWithCurrentItem=“True”Margin=“0,0,20”Height=“200”Width=“300”>
@SinatrYes,您在此处将HorizontalScrollBarVisibility
设置为Disabled
,但在模板内部,您将ScrollViewer的HorizontalScrollBarVisibility
设置为Auto
。也可以将其设置为Disabled,或者按照Sinatr在回答中的建议使用TemplateBindings。这对我不起作用。。但是非常感谢
,我想这是因为您正在重写模板。尝试在您的itemsresenter
和/或您的ItemsPanelTemplate的StackPanel
中设置cliptobunds=“True”
<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled" ... />
<ListBox ... >
<ListBox.Template>
<ControlTemplate TargetType="ListBox">
<Border ...>
<ScrollViewer HorizontalScrollBarVisibility="Auto" ...>
<ScrollViewer HorizontalScrollBarVisibility="{TemplateBinding HorizontalScrollBarVisibility}" ...>
<ListBox Grid.Row="0"
Name="ListBoxWindow"
ItemsSource="{Binding}"
ItemTemplate="{StaticResource Thumb}"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Disabled"
IsSynchronizedWithCurrentItem="True"
Margin="0,0,0,20"
Height="200"
Width="300"
ClipToBounds="True">
<ListBox.Template>
<!--Does anyone know a better way to turn off horizontal scrolling in a ListBox?-->
<ControlTemplate TargetType="ListBox"
xmlns:s="clr-namespace:System;assembly=mscorlib">
<Border BorderBrush="{TemplateBinding Border.BorderBrush}"
BorderThickness="{TemplateBinding Border.BorderThickness}"
Name="Bd"
Background="{TemplateBinding Panel.Background}"
SnapsToDevicePixels="True"
Padding="1,1,1,1">
<ScrollViewer VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}"
HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}"
Focusable="False"
Padding="{TemplateBinding Control.Padding}">
<ItemsPresenter SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}"
ClipToBounds="{TemplateBinding ClipToBounds}" />
</ScrollViewer>
</Border>
<ItemsPresenter SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" ClipToBounds="True" Width="400"/>