基本上,我有一个应用程序可以帮助我对照片和电影的收藏进行分类/分类。非常简单,我有一个obs
,其中列出了特定文件夹中的所有文件。有两列:ObservableValue
和DataGrid
。我将使用箭头浏览此DataGrid,然后按空格键是否要保留文件(第一列为Keep
,因此当我按空格键时,该复选框处于选中状态)。因此,无需单击任何内容,它看起来像这样:
但是,当我单击文件名时(当我单击同一行,但Filename
列时,它不会滚动,但与文件名列相比要小得多,所以最终我总是单击行的文件名列的一部分),并且它太长了,无法像这样水平滚动:
问题在于,现在我看不到bool
列,因此我必须手动向后滚动,以查看是否标记了文件。因此,为解决此问题,我在SO上看到了许多答案,建议编辑Keep
的XAML部分。问题是,这是我的XAML文件:
Keep
重要的是,我自己没有定义列,这就是我填充数据网格的方式:
MainWindow
因此,我通过更改代码中的<Controls:MetroWindow x:Class="FileOrganiser.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
xmlns:local="clr-namespace:FileOrganiser"
mc:Ignorable="d"
Title="File Organiser" Height="450" Width="800">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="1*" />
<RowDefinition Height="8*" />
<RowDefinition Height="1*" />
</Grid.RowDefinitions>
<MediaElement x:Name="Media" Grid.Row="0" Grid.Column="1" Grid.RowSpan="2" Margin="5"/>
<DataGrid x:Name="FilesList" Grid.Column="0" Grid.Row="1" Grid.RowSpan="2" HorizontalAlignment="Center"
SelectionChanged="FilesList_OnSelectionChanged">
</DataGrid>
<Button x:Name="ButtonSOrt" Grid.Column="1" Grid.Row="2"></Button>
</Grid>
</Controls:MetroWindow>
来实现。而且,如果我自己定义列并像这样更改public MainWindow()
{
InitializeComponent();
while (true)
{
RootDir = FileUtils.SelectRootFolder();
if (RootDir == string.Empty) MessageBox.Show("Select a root folder!");
else break;
}
files = Directory.GetFiles(RootDir);
var videos = files.Select(file => new Video(Path.GetFileName(file), false)).ToList();
FilesList.ItemsSource = videos;
}
,我将有4列而不是2列。那么当我以这种方式实现时,有没有办法防止这种自动滚动?
答案 0 :(得分:1)
决定再回答一次,因为这应该是首选方法,因为它可以使您更好地控制布局:
将其放入您的XAML:
<DataGrid x:Name="FilesList" HorizontalAlignment="Center" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridCheckBoxColumn Binding="{Binding Keep}" Width="25"/>
<DataGridTextColumn Binding="{Binding Filename}" Width="*"/>
</DataGrid.Columns>
</DataGrid>
后面的代码中无需进行任何更改。
答案 1 :(得分:-1)
Datagrid应该具有以下附加属性: https://docs.microsoft.com/de-de/dotnet/api/system.windows.controls.scrollviewer.horizontalscrollbarvisibility?view=netframework-4.8
将此设置为“已禁用”:
public class QuickstartSample {
public static void main(String[] args) throws Exception {
// Instantiates a client
try {
ImageAnnotatorClient vision = ImageAnnotatorClient.create();
// The path to the image file to annotate
String fileName = "Bill.jpg";
// Reads the image file into memory
Path path = Paths.get(fileName);
byte[] data = Files.readAllBytes(path);
ByteString imgBytes = ByteString.copyFrom(data);
// Builds the image annotation request
List<AnnotateImageRequest> requests = new ArrayList<>();
Image img = Image.newBuilder().setContent(imgBytes).build();
Feature feat = Feature.newBuilder().setType(Type.LABEL_DETECTION).build();
AnnotateImageRequest request = AnnotateImageRequest.newBuilder()
.addFeatures(feat)
.setImage(img)
.build();
requests.add(request);
// Performs label detection on the image file
BatchAnnotateImagesResponse response = vision.batchAnnotateImages(requests);
List<AnnotateImageResponse> responses = response.getResponsesList();
for (AnnotateImageResponse res : responses) {
if (res.hasError()) {
// System.out.printf("Error: %s\n", res.getError().getMessage());
return;
}
/* for (EntityAnnotation annotation : res.getLabelAnnotationsList()) {
annotation.getAllFields().forEach((k, v) ->
System.out.printf("%s : %s\n", k, v.toString()));
}*/
}
}
catch(Exception e)
{
}