数字を扱う項目を右寄せにしてみます。
・サンプルコードを起動すると「Age」項目が右寄せになっていることを確認
・項目の幅の変更にも追随
ファイル名:ListViewItemRightSide.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net9.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UseWPF>true</UseWPF>
</PropertyGroup>
</Project>
ファイル名:App.cs
using System;
using System.Windows;
namespace ListViewItemRightSide;
public class App : Application
{
[STAThread]
public static void Main(string[] args)
{
var app = new App();
app.Run();
}
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
var win = new MainWindow();
win.Show();
}
}
ファイル名:AssemblyInfo.cs
using System.Windows;
[assembly:ThemeInfo(
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
//(used if a resource is not found in the page,
// or application resource dictionaries)
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
//(used if a resource is not found in the page,
// app, or any theme specific resource dictionaries)
)]
ファイル名:MainWindow.cs
using System;
using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
namespace ListViewItemRightSide;
public class Person
{
public string Name { get; set; } = "";
public int Age { get; set; }
}
public class MainViewModel
{
public ObservableCollection<Person> People { get; } =
new ObservableCollection<Person>
{
new Person { Name = "Alice", Age = 30 },
new Person { Name = "Bob", Age = 25 },
new Person { Name = "Charlie", Age = 35 }
};
}
public class MainWindow : Window
{
public MainWindow()
{
Title = "NoXAML ListView Sample";
Width = 400;
Height = 300;
// ViewModel作成&DataContext設定
var vm = new MainViewModel();
DataContext = vm;
// ListView作成
var listView = new ListView();
listView.SetBinding(ItemsControl.ItemsSourceProperty,
new Binding("People"));
// DataTemplate
var dataTemplate = new DataTemplate();
// TextBlock(Age)
var textFactory = new FrameworkElementFactory(typeof(TextBlock));
textFactory.SetBinding(TextBlock.TextProperty, new Binding("Age"));
textFactory.SetValue(TextBlock.HorizontalAlignmentProperty, HorizontalAlignment.Right);
dataTemplate.VisualTree = textFactory;
// GridViewをListViewにセット
var gridView = new GridView();
// 列1: Name
gridView.Columns.Add(new GridViewColumn
{
Header = "Name",
DisplayMemberBinding = new Binding("Name")
});
// 列2: Age
gridView.Columns.Add(new GridViewColumn
{
Header = "Age",
//DisplayMemberBinding = new Binding("Age"),
CellTemplate = dataTemplate,
Width = 200,
});
// スタイル作成
var style = new Style(typeof(ListViewItem));
style.Setters.Add(new Setter(ListViewItem.HorizontalContentAlignmentProperty, HorizontalAlignment.Stretch));
// ListViewに適用
listView.ItemContainerStyle = style;
listView.ItemTemplate = dataTemplate;
listView.View = gridView;
// WindowにListViewを配置
Content = listView;
}
}
コメント