Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使列表框中的项目溢出_C#_.net_Wpf_Xaml - Fatal编程技术网

C# 使列表框中的项目溢出

C# 使列表框中的项目溢出,c#,.net,wpf,xaml,C#,.net,Wpf,Xaml,船首有个溢流 如果有人知道我在这部分代码中犯了什么错误 我检查这个问题,但不是很好的答案 ListView也不起作用, 我将尝试使用ItemControl,但获取所选项目并不容易 也许是用Zindex?但也不管用 假的 假的 真的 缩略图样式 这是缩略图用户控件 public部分类ThumbnailView:UserControl { #区域私人成员 私有只读ModalBehavioru ModalBehavior; 私有列表\u activeWindows; 私人词典(active)

船首有个溢流 如果有人知道我在这部分代码中犯了什么错误 我检查这个问题,但不是很好的答案

ListView也不起作用, 我将尝试使用ItemControl,但获取所选项目并不容易

也许是用Zindex?但也不管用


假的
假的
真的
缩略图样式


这是缩略图用户控件

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"/>