Files
microsoft-ui-xaml/controls/dev/Generated/TableViewColumn.properties.cpp
T
Hitesh KumarandCopilot d5132fd2e4 TableView: templated column headers, UIA resize, sort fixes, recycle perf, theming (#12307)
## Fixes

| Internal issue | Type | Change |
|---|---|---|
| https://task.ms/64475625 | Bug | Column headers are a templated,
restylable `TableViewColumnHeader` with visual states |
| https://task.ms/64475623 | Bug | Header typography comes from the
header Style, not C++ local values |
| https://task.ms/64143451 | Bug | Header column separators are always
drawn (no new property); hide them by overriding
`TabularSurfaceHeaderSeparatorBrush` |
| https://task.ms/63996584 | Task | Column headers expose the UIA
Transform pattern so UIA clients can resize columns |
| https://task.ms/64475611 | Bug | Outer border uses new
`TabularSurfaceOuterBorderBrush` (`CardStrokeColorDefault`); grid-line
values were in #12349 |
| https://task.ms/64475629 | Bug | Default group header uses theme
tokens (SemiBold key style, 8px spacing); the item count inherits the
header `Foreground` |
| https://task.ms/64652961 | Task | Row recycling no longer regenerates
cells or refreshes row chrome twice (scroll performance) |
| https://task.ms/63790855 | Task | Sort: `CanSort` is enforced and
`SortByColumn(column, None)` always clears; a sort through a source
another table owns returns false; no spurious `Sorted`; an app-owned
sort survives a `CanSort`/`CanUserSortColumns` opt-out |
| https://task.ms/63787021 | Task | Cell automation-peer constructor
validates its arguments; `BeginEdit` rolls back when it throws |

Not changed: https://task.ms/64512732 (by design: Auto columns follow
content width), https://task.ms/64475627 (design decision: keep chevron
sort glyphs), https://task.ms/64513223 (investigation only; fix
deferred).

## PR Type

- [x] Bugfix
- [x] Feature
- [ ] Code style update (formatting, renaming)
- [ ] Refactoring (no functional changes, no API changes)
- [ ] Build related changes
- [x] Documentation content changes
- [ ] Other (please describe):

## Description

Follow-up to #12349 (merged) and #12285.

Column headers move from code-built Grids to a new templated
`TableViewColumnHeader`, restylable through
`TableView.ColumnHeaderStyle` or `TableViewColumn.HeaderStyle`. Header
peers gain the UIA Transform pattern for column resize. Sort behavior is
tightened around `CanSort`, opt-outs and shared `TableViewSource`
ownership. Row recycling reuses cells. Outer border, header lines and
the default group header follow Fluent tokens.

Review-driven fixes included here:
- The header Style's `TargetType` `TypeName` is kept alive while it is
compared; a Style with only `BasedOn` typed is applied, and its setters
are read before applying it seals the Style. Incompatible, untyped or
cyclic `BasedOn` Styles are ignored with a debug diagnostic.
- A header disabled by its Style reports `IsEnabled=false` and is not
invokable through UIA.
- UIA `Transform.Resize` converts physical pixels through the table's
full visual scale (not only `RasterizationScale`), and a width change
below the drag jitter deadband is written once, exactly.
- Disabling a header in its High Contrast hover/pressed state keeps the
disabled foreground (state order fixed); the disabled sort glyph follows
the text brush across theme changes.
- A `CanSort` opt-out made inside `BeginningEdit` is replayed after the
edit it let open closes, and rebuilds headers even when a `Sorted`
handler throws.
- Header rebuilds caused by `Content`/`Header` or `Columns` changes keep
focus in the header band, respect an app's own focus move, and release
`UIElement` headers back to the app.
- A disabled group header does not dim its item count twice. The count
opacity follows `ContentTemplate` changes while the header is disabled.

<details><summary>Product changes by file</summary>

| File | +/- | What changed | Items |
|---|---|---|---|
| `TableView/TableView.cpp` (+ .h) | +684 / −382 | `RebuildHeaders`
creates `TableViewColumnHeader` controls; applies
`ColumnHeaderStyle`/`HeaderStyle` with TargetType/BasedOn checks;
density MinHeight/Padding only when the Style doesn't set
them<br>`ReleaseHeaderCells` and header-focus handling for
removed/replaced columns, re-entrant rebuilds and app focus
moves<br>Header bottom rule thickness set on `PART_HeaderRow`; header
lines no longer follow `GridLinesVisibility`<br>Row prepare/clear
refresh chrome once; `TryResizeColumnFromAutomation` writes small widths
exactly | 64475625, 64475623, 64143451, 64652961, 63996584, 63790855 |
| `TableView/TableViewColumnHeader.cpp` (+ .h; replaces
`TableViewHeaderCell.h`) | +435 / −210 | New sealed templated
`ContentControl` with read-only `Column`<br>Resolves
`PART_ContentPresenter`, `PART_GridLine`, `PART_SortIndicatorHost`,
`PART_ResizeGripperHost`; hosts the sort glyph and gripper<br>Drives
`CommonStates`/`HighContrastStates`/`SortStates`; disabled sort glyph
bound to the text brush | 64475625, 64475623 |
| `TableView/TableViewRow.cpp` (+ .h) | +191 / −35 | Recycled rows keep
their cells unless cell automation peers exist; chrome refreshed once;
tooltips re-applied on recycle<br>`BeginCellEdit` restores display
element, edit state and focus on throw | 64652961, 63787021 |
| `TableView/TableView.xaml` | +128 / −18 | Default
`TableViewColumnHeader` Style/template: typography setters, visual
states, parts<br>Outer border uses `TabularSurfaceOuterBorderBrush`;
header lines use `TabularSurfaceHeaderSeparatorBrush`<br>Group header:
`TableViewGroupExpanderSpacing` (8), padding 8,8,12,8, key/count text
styles, count inherits `Foreground` | 64475625, 64475623, 64475611,
64475629 |
| `TableView/TableViewColumnHeaderAutomationPeer.cpp` (+ .h) | +127 / −9
| `ITransformProvider`: `Resize` converts physical px through the visual
scale; `CanResize` tracks gripper availability (pinned →
false)<br>`IsEnabled` follows the header; name read from the content
presenter | 63996584, 64475625 |
| `TableView/TableView_Sort.cpp` | +113 / −39 | `SortByColumn(None)`
bypasses the `CanSort` gate; other sorts refused<br>Sort through a
source owned by another table returns false; implicit clears keep the
app's sort and raise no `Sorted`; app-lit columns left alone on opt-out
| 63790855 |
| `TableView/TableView_Layout.cpp` | +74 / −14 | Realized-row walk only
when a visible Auto column exists<br>Transform `CanResize` changes
raised for existing header peers | 64652961, 63996584 |
| `TableView/TableView_Editing.cpp` | +63 / −15 | `BeginEdit` unwinds on
throw; `CanSort` opt-out during `BeginningEdit` queued until the edit
closes | 63787021, 63790855 |
| `TableView/TableViewCellAutomationPeer.cpp` (+ .h, `TableViewCell.h`)
| +48 / −0 | Public constructor throws `E_INVALIDARG` for null args,
negative/out-of-range index or a foreign column; internal path uses
`TrustedOwnerTag` | 63787021 |
| `TableView/TableViewGroupHeader.cpp` (+ .h) | +39 / −0 | Default
count's opacity is not applied twice when disabled | 64475629 |
| `TableView/TableView.idl` | +31 / −13 | `TableViewColumnHeader`,
`TableView.ColumnHeaderStyle`,
`TableViewColumn.HeaderStyle`<br>`CanSort`/`SortByColumn`/`ToggleSortDirection`/`GridLinesVisibility`
docs; cell-peer `E_INVALIDARG`; group-header parts | 64475625, 63790855,
64143451, 63787021 |
| `TableView/TableView_Columns.cpp` | +19 / −0 | Releases removed
columns' header cells; old `UIElement` `Header` returned to the app on
change | 64475625 |
| `TableView/TableViewColumn.cpp` | +7 / −0 | `HeaderStyle` change
queues a header rebuild | 64475625 |
| `TableView/TableViewSource.h` | +6 / −0 | `IsOwnedByOther` helper for
sort sync | 63790855 |
| `CommonStyles/TabularSurfaces_themeresources.xaml` | +5 / −2 | New
`TabularSurfaceOuterBorderBrush` (Dark/Light/HC); group count opacity
documented as secondary-over-primary text (0.77 Dark) | 64475611,
64475629 |
| `TableView/TableView.vcxitems` | +2 / −1 | Swap
`TableViewHeaderCell.h` for `TableViewColumnHeader.*` | 64475625 |
| Generated / metadata (`Generated/TableView.properties.*`,
`Generated/TableViewColumn.properties.*`,
`dll-tabular/XamlMetadataProviderGenerated.h`) | +123 / −0 | Codegen for
the new properties and type | 64475625 |

**Total: 17 rows, 29 product files, +2117 / −738.** Also: 19 test files
(+3718 / −32), 3 docs (+161 / −35), 6 sample files (+2 / −9).

</details>

### New preview API (needs API review)

- **`TableViewColumnHeader`**: sealed, templated `ContentControl`,
created only by `TableView`.
  - Read-only `Column` property.
- Template parts (optional): `PART_ContentPresenter`, `PART_GridLine`,
`PART_SortIndicatorHost`, `PART_ResizeGripperHost`.
- Visual state groups: `CommonStates`, `HighContrastStates`,
`SortStates`.
- **`TableView.ColumnHeaderStyle`**: Style applied to every column
header.
- **`TableViewColumn.HeaderStyle`**: per-column Style; wins over
`TableView.ColumnHeaderStyle`.

There is no `HeaderGridLinesVisibility` property. `GridLinesVisibility`
affects body lines only; header lines are always drawn. To hide them,
override `TabularSurfaceHeaderSeparatorBrush` with `Transparent`.

### Current Behavior
- Headers are built in C++ with no template, no visual states and forced
local typography, so apps can't restyle them. Header separators don't
show.
- Header peers report `HeaderItem` without Transform, so UIA clients
can't resize columns.
- `SortByColumn` ignores `CanSort`; `CanSort=false` on a sorted column
leaves the sort in place; sorting through a source another table owns
reports success; some implicit clears raise `Sorted(None)` while the
app's sort remains.
- The cell peer constructor accepts invalid arguments; a throw in
`BeginEdit` leaves edit state half-open.
- Recycling a row rebuilt every cell, refreshed chrome up to twice and
invalidated the table's measure.
- The outer border has no dedicated brush; the default group header uses
raw weights and off-grid spacing.

### New Behavior
- Headers use the templated `TableViewColumnHeader` (see API above);
typography, padding and brushes come from Style setters.
- Header peers implement `ITransformProvider` through the existing
resize path (Min/Max clamping, scale conversion; pinned columns report
`CanResize=false`).
- `CanSort=false` blocks header clicks, `SortByColumn` (except `None`)
and `ToggleSortDirection`, and clears the column's own active sort;
sorts through a source owned by another table return false; `Sorted` is
raised only when the table's sort state changes.
- Cell peer constructor throws `E_INVALIDARG` on bad input; `BeginEdit`
rolls back on failure.
- Recycled rows reuse their cells unless cell automation peers exist;
chrome refreshes once.

> **Visible changes**
> - Outer border uses `CardStrokeColorDefault`.
> - Header lines are always shown, even when `GridLinesVisibility` is
`None` or `Horizontal`.
> - Group header restyled: 8px spacing; the count follows the header
`Foreground`.
> - Disabled header text and sort glyph dim.
> - TableView samples no longer opt out of High Contrast backplates
app-wide.

## Customer Impact

Restylable column headers, visible header separators, Fluent-aligned
outer border and group headers, UIA column resize for assistive
technology, smoother scrolling and predictable sort events.

## Regression Potential

- [ ] Low risk — isolated change, limited scope
- [x] Medium risk — touches shared components or public APIs
- [ ] High risk — architectural or breaking API change

Header construction (focus restore, frozen columns, UIA peer, tooltips,
resize, sort glyph) moved to a templated control. Sort event semantics
are tighter: `CanSort` is enforced on programmatic sorts and fewer
`Sorted` events fire. Outer border color and always-on header lines
change visibly. Covered by new and existing tests.

## How Has This Been Tested?

- [x] I have performed a self-review of my own code
- [x] I have added tests to cover my changes
- [x] Existing tests pass locally

Full TableView API and interaction suites on test VMs: 877/882 pass at
224d10d5c; 3 Localization tests are [Ignore] and 2 intermittent failures
passed 3/3 on rerun. Product, test apps and TableView sample apps build
(x64 chk).

Also covered:
`VerifyDisabledGroupHeaderCountFollowsContentTemplateChanges`.

Key new tests:
- `VerifyColumnHeaderTemplateParts`, `VerifyColumnHeaderSortStates`,
`VerifyColumnHeaderTypographyHasNoLocalValues`
- `VerifyColumnHeaderStyleApplies`,
`VerifyBasedOnOnlyColumnHeaderStyleApplies`,
`VerifyIncompatibleColumnHeaderStyleIsIgnored`
- `VerifyHeaderGridLinesShowWhateverTheBodyGridLines`,
`VerifyTransparentHeaderSeparatorBrushHidesHeaderLines`,
`VerifyGridLineAndOuterBorderBrushesMatchFluentStrokeTokens`
- `VerifyDisablingHighContrastHoveredHeaderKeepsDisabledForeground`,
`VerifyDefaultGroupHeaderCountInheritsForegroundThatFollowsStates`
- `VerifyTransformResizeAccountsForAncestorScale`,
`VerifyTransformResizeSmallWidthChangeWritesOnce`,
`VerifyHeaderDisabledByStyleIsNotEnabledOrInvokable`
- `VerifySortByColumnRespectsCanSort`,
`VerifyImplicitClearKeepsSourceSort`,
`VerifyUngatingKeepsAppLitColumnWithoutEvents`,
`VerifySortOptOutDuringBeginningEditKeepsTheEditOpen`
- `VerifyRecycledRowWithoutCellPeersReusesItsCells`,
`VerifyHeaderFocusStaysInHeaderBandWhenColumnsReplaced`,
`VerifyBeginEditThatThrowsRollsBackAndAllowsALaterEdit`,
`VerifyCellPeerConstructorValidatesArguments`

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 94961bb8-d187-483c-bece-19e203752c67
2026-10-23 14:10:17 +05:30

661 lines
24 KiB
C++

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See LICENSE in the project root for license information.
// DO NOT EDIT! This file was generated by CustomTasks.DependencyPropertyCodeGen
#include "pch.h"
#include "common.h"
#include "TableViewColumn.h"
namespace winrt::Microsoft::UI::Xaml::Controls::Tabular
{
CppWinRTActivatableClassWithDPFactory(TableViewColumn)
}
#include "TableViewColumn.g.cpp"
GlobalDependencyProperty TableViewColumnProperties::s_ActualWidthProperty{ nullptr };
GlobalDependencyProperty TableViewColumnProperties::s_CanResizeProperty{ nullptr };
GlobalDependencyProperty TableViewColumnProperties::s_CanSortProperty{ nullptr };
GlobalDependencyProperty TableViewColumnProperties::s_CellContextFlyoutProperty{ nullptr };
GlobalDependencyProperty TableViewColumnProperties::s_CellEditingTemplateProperty{ nullptr };
GlobalDependencyProperty TableViewColumnProperties::s_FrozenEdgeProperty{ nullptr };
GlobalDependencyProperty TableViewColumnProperties::s_HeaderProperty{ nullptr };
GlobalDependencyProperty TableViewColumnProperties::s_HeaderContextFlyoutProperty{ nullptr };
GlobalDependencyProperty TableViewColumnProperties::s_HeaderStyleProperty{ nullptr };
GlobalDependencyProperty TableViewColumnProperties::s_HeaderTemplateProperty{ nullptr };
GlobalDependencyProperty TableViewColumnProperties::s_HeaderTemplateSelectorProperty{ nullptr };
GlobalDependencyProperty TableViewColumnProperties::s_HeaderToolTipProperty{ nullptr };
GlobalDependencyProperty TableViewColumnProperties::s_IsReadOnlyProperty{ nullptr };
GlobalDependencyProperty TableViewColumnProperties::s_MaxWidthProperty{ nullptr };
GlobalDependencyProperty TableViewColumnProperties::s_MinWidthProperty{ nullptr };
GlobalDependencyProperty TableViewColumnProperties::s_SortCycleProperty{ nullptr };
GlobalDependencyProperty TableViewColumnProperties::s_SortDirectionProperty{ nullptr };
GlobalDependencyProperty TableViewColumnProperties::s_SortMemberPathProperty{ nullptr };
GlobalDependencyProperty TableViewColumnProperties::s_VisibilityProperty{ nullptr };
GlobalDependencyProperty TableViewColumnProperties::s_WidthProperty{ nullptr };
TableViewColumnProperties::TableViewColumnProperties()
{
EnsureProperties();
}
void TableViewColumnProperties::EnsureProperties()
{
if (!s_ActualWidthProperty)
{
s_ActualWidthProperty =
InitializeDependencyProperty(
L"ActualWidth",
winrt::name_of<double>(),
winrt::name_of<winrt::TableViewColumn>(),
false /* isAttached */,
ValueHelper<double>::BoxValueIfNecessary(120.0),
nullptr);
}
if (!s_CanResizeProperty)
{
s_CanResizeProperty =
InitializeDependencyProperty(
L"CanResize",
winrt::name_of<bool>(),
winrt::name_of<winrt::TableViewColumn>(),
false /* isAttached */,
ValueHelper<bool>::BoxValueIfNecessary(true),
winrt::PropertyChangedCallback(&OnCanResizePropertyChanged));
}
if (!s_CanSortProperty)
{
s_CanSortProperty =
InitializeDependencyProperty(
L"CanSort",
winrt::name_of<bool>(),
winrt::name_of<winrt::TableViewColumn>(),
false /* isAttached */,
ValueHelper<bool>::BoxValueIfNecessary(true),
winrt::PropertyChangedCallback(&OnCanSortPropertyChanged));
}
if (!s_CellContextFlyoutProperty)
{
s_CellContextFlyoutProperty =
InitializeDependencyProperty(
L"CellContextFlyout",
winrt::name_of<winrt::FlyoutBase>(),
winrt::name_of<winrt::TableViewColumn>(),
false /* isAttached */,
ValueHelper<winrt::FlyoutBase>::BoxedDefaultValue(),
nullptr);
}
if (!s_CellEditingTemplateProperty)
{
s_CellEditingTemplateProperty =
InitializeDependencyProperty(
L"CellEditingTemplate",
winrt::name_of<winrt::DataTemplate>(),
winrt::name_of<winrt::TableViewColumn>(),
false /* isAttached */,
ValueHelper<winrt::DataTemplate>::BoxedDefaultValue(),
winrt::PropertyChangedCallback(&OnCellEditingTemplatePropertyChanged));
}
if (!s_FrozenEdgeProperty)
{
s_FrozenEdgeProperty =
InitializeDependencyProperty(
L"FrozenEdge",
winrt::name_of<winrt::TableViewFrozenEdge>(),
winrt::name_of<winrt::TableViewColumn>(),
false /* isAttached */,
ValueHelper<winrt::TableViewFrozenEdge>::BoxValueIfNecessary(winrt::TableViewFrozenEdge::None),
winrt::PropertyChangedCallback(&OnFrozenEdgePropertyChanged));
}
if (!s_HeaderProperty)
{
s_HeaderProperty =
InitializeDependencyProperty(
L"Header",
winrt::name_of<winrt::IInspectable>(),
winrt::name_of<winrt::TableViewColumn>(),
false /* isAttached */,
ValueHelper<winrt::IInspectable>::BoxedDefaultValue(),
winrt::PropertyChangedCallback(&OnHeaderPropertyChanged));
}
if (!s_HeaderContextFlyoutProperty)
{
s_HeaderContextFlyoutProperty =
InitializeDependencyProperty(
L"HeaderContextFlyout",
winrt::name_of<winrt::FlyoutBase>(),
winrt::name_of<winrt::TableViewColumn>(),
false /* isAttached */,
ValueHelper<winrt::FlyoutBase>::BoxedDefaultValue(),
nullptr);
}
if (!s_HeaderStyleProperty)
{
s_HeaderStyleProperty =
InitializeDependencyProperty(
L"HeaderStyle",
winrt::name_of<winrt::Style>(),
winrt::name_of<winrt::TableViewColumn>(),
false /* isAttached */,
ValueHelper<winrt::Style>::BoxedDefaultValue(),
winrt::PropertyChangedCallback(&OnHeaderStylePropertyChanged));
}
if (!s_HeaderTemplateProperty)
{
s_HeaderTemplateProperty =
InitializeDependencyProperty(
L"HeaderTemplate",
winrt::name_of<winrt::DataTemplate>(),
winrt::name_of<winrt::TableViewColumn>(),
false /* isAttached */,
ValueHelper<winrt::DataTemplate>::BoxedDefaultValue(),
winrt::PropertyChangedCallback(&OnHeaderTemplatePropertyChanged));
}
if (!s_HeaderTemplateSelectorProperty)
{
s_HeaderTemplateSelectorProperty =
InitializeDependencyProperty(
L"HeaderTemplateSelector",
winrt::name_of<winrt::DataTemplateSelector>(),
winrt::name_of<winrt::TableViewColumn>(),
false /* isAttached */,
ValueHelper<winrt::DataTemplateSelector>::BoxedDefaultValue(),
winrt::PropertyChangedCallback(&OnHeaderTemplateSelectorPropertyChanged));
}
if (!s_HeaderToolTipProperty)
{
s_HeaderToolTipProperty =
InitializeDependencyProperty(
L"HeaderToolTip",
winrt::name_of<winrt::IInspectable>(),
winrt::name_of<winrt::TableViewColumn>(),
false /* isAttached */,
ValueHelper<winrt::IInspectable>::BoxedDefaultValue(),
winrt::PropertyChangedCallback(&OnHeaderToolTipPropertyChanged));
}
if (!s_IsReadOnlyProperty)
{
s_IsReadOnlyProperty =
InitializeDependencyProperty(
L"IsReadOnly",
winrt::name_of<bool>(),
winrt::name_of<winrt::TableViewColumn>(),
false /* isAttached */,
ValueHelper<bool>::BoxValueIfNecessary(false),
winrt::PropertyChangedCallback(&OnIsReadOnlyPropertyChanged));
}
if (!s_MaxWidthProperty)
{
s_MaxWidthProperty =
InitializeDependencyProperty(
L"MaxWidth",
winrt::name_of<double>(),
winrt::name_of<winrt::TableViewColumn>(),
false /* isAttached */,
ValueHelper<double>::BoxValueIfNecessary(std::numeric_limits<double>::infinity()),
winrt::PropertyChangedCallback(&OnMaxWidthPropertyChanged));
}
if (!s_MinWidthProperty)
{
s_MinWidthProperty =
InitializeDependencyProperty(
L"MinWidth",
winrt::name_of<double>(),
winrt::name_of<winrt::TableViewColumn>(),
false /* isAttached */,
ValueHelper<double>::BoxValueIfNecessary(20.0),
winrt::PropertyChangedCallback(&OnMinWidthPropertyChanged));
}
if (!s_SortCycleProperty)
{
s_SortCycleProperty =
InitializeDependencyProperty(
L"SortCycle",
winrt::name_of<winrt::TableViewSortCycle>(),
winrt::name_of<winrt::TableViewColumn>(),
false /* isAttached */,
ValueHelper<winrt::TableViewSortCycle>::BoxValueIfNecessary(winrt::TableViewSortCycle::AscendingDescending),
nullptr);
}
if (!s_SortDirectionProperty)
{
s_SortDirectionProperty =
InitializeDependencyProperty(
L"SortDirection",
winrt::name_of<winrt::SortDirection>(),
winrt::name_of<winrt::TableViewColumn>(),
false /* isAttached */,
ValueHelper<winrt::SortDirection>::BoxValueIfNecessary(winrt::SortDirection::None),
nullptr);
}
if (!s_SortMemberPathProperty)
{
s_SortMemberPathProperty =
InitializeDependencyProperty(
L"SortMemberPath",
winrt::name_of<winrt::hstring>(),
winrt::name_of<winrt::TableViewColumn>(),
false /* isAttached */,
ValueHelper<winrt::hstring>::BoxedDefaultValue(),
nullptr);
}
if (!s_VisibilityProperty)
{
s_VisibilityProperty =
InitializeDependencyProperty(
L"Visibility",
winrt::name_of<winrt::Visibility>(),
winrt::name_of<winrt::TableViewColumn>(),
false /* isAttached */,
ValueHelper<winrt::Visibility>::BoxValueIfNecessary(winrt::Visibility::Visible),
winrt::PropertyChangedCallback(&OnVisibilityPropertyChanged));
}
if (!s_WidthProperty)
{
s_WidthProperty =
InitializeDependencyProperty(
L"Width",
winrt::name_of<winrt::GridLength>(),
winrt::name_of<winrt::TableViewColumn>(),
false /* isAttached */,
ValueHelper<winrt::GridLength>::BoxValueIfNecessary(c_widthDefault),
winrt::PropertyChangedCallback(&OnWidthPropertyChanged));
}
}
void TableViewColumnProperties::ClearProperties()
{
s_ActualWidthProperty = nullptr;
s_CanResizeProperty = nullptr;
s_CanSortProperty = nullptr;
s_CellContextFlyoutProperty = nullptr;
s_CellEditingTemplateProperty = nullptr;
s_FrozenEdgeProperty = nullptr;
s_HeaderProperty = nullptr;
s_HeaderContextFlyoutProperty = nullptr;
s_HeaderStyleProperty = nullptr;
s_HeaderTemplateProperty = nullptr;
s_HeaderTemplateSelectorProperty = nullptr;
s_HeaderToolTipProperty = nullptr;
s_IsReadOnlyProperty = nullptr;
s_MaxWidthProperty = nullptr;
s_MinWidthProperty = nullptr;
s_SortCycleProperty = nullptr;
s_SortDirectionProperty = nullptr;
s_SortMemberPathProperty = nullptr;
s_VisibilityProperty = nullptr;
s_WidthProperty = nullptr;
}
void TableViewColumnProperties::OnCanResizePropertyChanged(
winrt::DependencyObject const& sender,
winrt::DependencyPropertyChangedEventArgs const& args)
{
auto owner = sender.as<winrt::TableViewColumn>();
winrt::get_self<TableViewColumn>(owner)->OnPropertyChanged(args);
}
void TableViewColumnProperties::OnCanSortPropertyChanged(
winrt::DependencyObject const& sender,
winrt::DependencyPropertyChangedEventArgs const& args)
{
auto owner = sender.as<winrt::TableViewColumn>();
winrt::get_self<TableViewColumn>(owner)->OnPropertyChanged(args);
}
void TableViewColumnProperties::OnCellEditingTemplatePropertyChanged(
winrt::DependencyObject const& sender,
winrt::DependencyPropertyChangedEventArgs const& args)
{
auto owner = sender.as<winrt::TableViewColumn>();
winrt::get_self<TableViewColumn>(owner)->OnPropertyChanged(args);
}
void TableViewColumnProperties::OnFrozenEdgePropertyChanged(
winrt::DependencyObject const& sender,
winrt::DependencyPropertyChangedEventArgs const& args)
{
auto owner = sender.as<winrt::TableViewColumn>();
winrt::get_self<TableViewColumn>(owner)->OnPropertyChanged(args);
}
void TableViewColumnProperties::OnHeaderPropertyChanged(
winrt::DependencyObject const& sender,
winrt::DependencyPropertyChangedEventArgs const& args)
{
auto owner = sender.as<winrt::TableViewColumn>();
winrt::get_self<TableViewColumn>(owner)->OnPropertyChanged(args);
}
void TableViewColumnProperties::OnHeaderStylePropertyChanged(
winrt::DependencyObject const& sender,
winrt::DependencyPropertyChangedEventArgs const& args)
{
auto owner = sender.as<winrt::TableViewColumn>();
winrt::get_self<TableViewColumn>(owner)->OnPropertyChanged(args);
}
void TableViewColumnProperties::OnHeaderTemplatePropertyChanged(
winrt::DependencyObject const& sender,
winrt::DependencyPropertyChangedEventArgs const& args)
{
auto owner = sender.as<winrt::TableViewColumn>();
winrt::get_self<TableViewColumn>(owner)->OnPropertyChanged(args);
}
void TableViewColumnProperties::OnHeaderTemplateSelectorPropertyChanged(
winrt::DependencyObject const& sender,
winrt::DependencyPropertyChangedEventArgs const& args)
{
auto owner = sender.as<winrt::TableViewColumn>();
winrt::get_self<TableViewColumn>(owner)->OnPropertyChanged(args);
}
void TableViewColumnProperties::OnHeaderToolTipPropertyChanged(
winrt::DependencyObject const& sender,
winrt::DependencyPropertyChangedEventArgs const& args)
{
auto owner = sender.as<winrt::TableViewColumn>();
winrt::get_self<TableViewColumn>(owner)->OnPropertyChanged(args);
}
void TableViewColumnProperties::OnIsReadOnlyPropertyChanged(
winrt::DependencyObject const& sender,
winrt::DependencyPropertyChangedEventArgs const& args)
{
auto owner = sender.as<winrt::TableViewColumn>();
winrt::get_self<TableViewColumn>(owner)->OnPropertyChanged(args);
}
void TableViewColumnProperties::OnMaxWidthPropertyChanged(
winrt::DependencyObject const& sender,
winrt::DependencyPropertyChangedEventArgs const& args)
{
auto owner = sender.as<winrt::TableViewColumn>();
winrt::get_self<TableViewColumn>(owner)->OnPropertyChanged(args);
}
void TableViewColumnProperties::OnMinWidthPropertyChanged(
winrt::DependencyObject const& sender,
winrt::DependencyPropertyChangedEventArgs const& args)
{
auto owner = sender.as<winrt::TableViewColumn>();
winrt::get_self<TableViewColumn>(owner)->OnPropertyChanged(args);
}
void TableViewColumnProperties::OnVisibilityPropertyChanged(
winrt::DependencyObject const& sender,
winrt::DependencyPropertyChangedEventArgs const& args)
{
auto owner = sender.as<winrt::TableViewColumn>();
winrt::get_self<TableViewColumn>(owner)->OnPropertyChanged(args);
}
void TableViewColumnProperties::OnWidthPropertyChanged(
winrt::DependencyObject const& sender,
winrt::DependencyPropertyChangedEventArgs const& args)
{
auto owner = sender.as<winrt::TableViewColumn>();
winrt::get_self<TableViewColumn>(owner)->OnPropertyChanged(args);
}
void TableViewColumnProperties::ActualWidth(double value)
{
[[gsl::suppress(con)]]
{
static_cast<TableViewColumn*>(this)->SetValue(s_ActualWidthProperty, ValueHelper<double>::BoxValueIfNecessary(value));
}
}
double TableViewColumnProperties::ActualWidth()
{
return ValueHelper<double>::CastOrUnbox(static_cast<TableViewColumn*>(this)->GetValue(s_ActualWidthProperty));
}
void TableViewColumnProperties::CanResize(bool value)
{
[[gsl::suppress(con)]]
{
static_cast<TableViewColumn*>(this)->SetValue(s_CanResizeProperty, ValueHelper<bool>::BoxValueIfNecessary(value));
}
}
bool TableViewColumnProperties::CanResize()
{
return ValueHelper<bool>::CastOrUnbox(static_cast<TableViewColumn*>(this)->GetValue(s_CanResizeProperty));
}
void TableViewColumnProperties::CanSort(bool value)
{
[[gsl::suppress(con)]]
{
static_cast<TableViewColumn*>(this)->SetValue(s_CanSortProperty, ValueHelper<bool>::BoxValueIfNecessary(value));
}
}
bool TableViewColumnProperties::CanSort()
{
return ValueHelper<bool>::CastOrUnbox(static_cast<TableViewColumn*>(this)->GetValue(s_CanSortProperty));
}
void TableViewColumnProperties::CellContextFlyout(winrt::FlyoutBase const& value)
{
[[gsl::suppress(con)]]
{
static_cast<TableViewColumn*>(this)->SetValue(s_CellContextFlyoutProperty, ValueHelper<winrt::FlyoutBase>::BoxValueIfNecessary(value));
}
}
winrt::FlyoutBase TableViewColumnProperties::CellContextFlyout()
{
return ValueHelper<winrt::FlyoutBase>::CastOrUnbox(static_cast<TableViewColumn*>(this)->GetValue(s_CellContextFlyoutProperty));
}
void TableViewColumnProperties::CellEditingTemplate(winrt::DataTemplate const& value)
{
[[gsl::suppress(con)]]
{
static_cast<TableViewColumn*>(this)->SetValue(s_CellEditingTemplateProperty, ValueHelper<winrt::DataTemplate>::BoxValueIfNecessary(value));
}
}
winrt::DataTemplate TableViewColumnProperties::CellEditingTemplate()
{
return ValueHelper<winrt::DataTemplate>::CastOrUnbox(static_cast<TableViewColumn*>(this)->GetValue(s_CellEditingTemplateProperty));
}
void TableViewColumnProperties::FrozenEdge(winrt::TableViewFrozenEdge const& value)
{
[[gsl::suppress(con)]]
{
static_cast<TableViewColumn*>(this)->SetValue(s_FrozenEdgeProperty, ValueHelper<winrt::TableViewFrozenEdge>::BoxValueIfNecessary(value));
}
}
winrt::TableViewFrozenEdge TableViewColumnProperties::FrozenEdge()
{
return ValueHelper<winrt::TableViewFrozenEdge>::CastOrUnbox(static_cast<TableViewColumn*>(this)->GetValue(s_FrozenEdgeProperty));
}
void TableViewColumnProperties::Header(winrt::IInspectable const& value)
{
[[gsl::suppress(con)]]
{
static_cast<TableViewColumn*>(this)->SetValue(s_HeaderProperty, ValueHelper<winrt::IInspectable>::BoxValueIfNecessary(value));
}
}
winrt::IInspectable TableViewColumnProperties::Header()
{
return ValueHelper<winrt::IInspectable>::CastOrUnbox(static_cast<TableViewColumn*>(this)->GetValue(s_HeaderProperty));
}
void TableViewColumnProperties::HeaderContextFlyout(winrt::FlyoutBase const& value)
{
[[gsl::suppress(con)]]
{
static_cast<TableViewColumn*>(this)->SetValue(s_HeaderContextFlyoutProperty, ValueHelper<winrt::FlyoutBase>::BoxValueIfNecessary(value));
}
}
winrt::FlyoutBase TableViewColumnProperties::HeaderContextFlyout()
{
return ValueHelper<winrt::FlyoutBase>::CastOrUnbox(static_cast<TableViewColumn*>(this)->GetValue(s_HeaderContextFlyoutProperty));
}
void TableViewColumnProperties::HeaderStyle(winrt::Style const& value)
{
[[gsl::suppress(con)]]
{
static_cast<TableViewColumn*>(this)->SetValue(s_HeaderStyleProperty, ValueHelper<winrt::Style>::BoxValueIfNecessary(value));
}
}
winrt::Style TableViewColumnProperties::HeaderStyle()
{
return ValueHelper<winrt::Style>::CastOrUnbox(static_cast<TableViewColumn*>(this)->GetValue(s_HeaderStyleProperty));
}
void TableViewColumnProperties::HeaderTemplate(winrt::DataTemplate const& value)
{
[[gsl::suppress(con)]]
{
static_cast<TableViewColumn*>(this)->SetValue(s_HeaderTemplateProperty, ValueHelper<winrt::DataTemplate>::BoxValueIfNecessary(value));
}
}
winrt::DataTemplate TableViewColumnProperties::HeaderTemplate()
{
return ValueHelper<winrt::DataTemplate>::CastOrUnbox(static_cast<TableViewColumn*>(this)->GetValue(s_HeaderTemplateProperty));
}
void TableViewColumnProperties::HeaderTemplateSelector(winrt::DataTemplateSelector const& value)
{
[[gsl::suppress(con)]]
{
static_cast<TableViewColumn*>(this)->SetValue(s_HeaderTemplateSelectorProperty, ValueHelper<winrt::DataTemplateSelector>::BoxValueIfNecessary(value));
}
}
winrt::DataTemplateSelector TableViewColumnProperties::HeaderTemplateSelector()
{
return ValueHelper<winrt::DataTemplateSelector>::CastOrUnbox(static_cast<TableViewColumn*>(this)->GetValue(s_HeaderTemplateSelectorProperty));
}
void TableViewColumnProperties::HeaderToolTip(winrt::IInspectable const& value)
{
[[gsl::suppress(con)]]
{
static_cast<TableViewColumn*>(this)->SetValue(s_HeaderToolTipProperty, ValueHelper<winrt::IInspectable>::BoxValueIfNecessary(value));
}
}
winrt::IInspectable TableViewColumnProperties::HeaderToolTip()
{
return ValueHelper<winrt::IInspectable>::CastOrUnbox(static_cast<TableViewColumn*>(this)->GetValue(s_HeaderToolTipProperty));
}
void TableViewColumnProperties::IsReadOnly(bool value)
{
[[gsl::suppress(con)]]
{
static_cast<TableViewColumn*>(this)->SetValue(s_IsReadOnlyProperty, ValueHelper<bool>::BoxValueIfNecessary(value));
}
}
bool TableViewColumnProperties::IsReadOnly()
{
return ValueHelper<bool>::CastOrUnbox(static_cast<TableViewColumn*>(this)->GetValue(s_IsReadOnlyProperty));
}
void TableViewColumnProperties::MaxWidth(double value)
{
[[gsl::suppress(con)]]
{
static_cast<TableViewColumn*>(this)->SetValue(s_MaxWidthProperty, ValueHelper<double>::BoxValueIfNecessary(value));
}
}
double TableViewColumnProperties::MaxWidth()
{
return ValueHelper<double>::CastOrUnbox(static_cast<TableViewColumn*>(this)->GetValue(s_MaxWidthProperty));
}
void TableViewColumnProperties::MinWidth(double value)
{
[[gsl::suppress(con)]]
{
static_cast<TableViewColumn*>(this)->SetValue(s_MinWidthProperty, ValueHelper<double>::BoxValueIfNecessary(value));
}
}
double TableViewColumnProperties::MinWidth()
{
return ValueHelper<double>::CastOrUnbox(static_cast<TableViewColumn*>(this)->GetValue(s_MinWidthProperty));
}
void TableViewColumnProperties::SortCycle(winrt::TableViewSortCycle const& value)
{
[[gsl::suppress(con)]]
{
static_cast<TableViewColumn*>(this)->SetValue(s_SortCycleProperty, ValueHelper<winrt::TableViewSortCycle>::BoxValueIfNecessary(value));
}
}
winrt::TableViewSortCycle TableViewColumnProperties::SortCycle()
{
return ValueHelper<winrt::TableViewSortCycle>::CastOrUnbox(static_cast<TableViewColumn*>(this)->GetValue(s_SortCycleProperty));
}
void TableViewColumnProperties::SortDirection(winrt::SortDirection const& value)
{
[[gsl::suppress(con)]]
{
static_cast<TableViewColumn*>(this)->SetValue(s_SortDirectionProperty, ValueHelper<winrt::SortDirection>::BoxValueIfNecessary(value));
}
}
winrt::SortDirection TableViewColumnProperties::SortDirection()
{
return ValueHelper<winrt::SortDirection>::CastOrUnbox(static_cast<TableViewColumn*>(this)->GetValue(s_SortDirectionProperty));
}
void TableViewColumnProperties::SortMemberPath(winrt::hstring const& value)
{
[[gsl::suppress(con)]]
{
static_cast<TableViewColumn*>(this)->SetValue(s_SortMemberPathProperty, ValueHelper<winrt::hstring>::BoxValueIfNecessary(value));
}
}
winrt::hstring TableViewColumnProperties::SortMemberPath()
{
return ValueHelper<winrt::hstring>::CastOrUnbox(static_cast<TableViewColumn*>(this)->GetValue(s_SortMemberPathProperty));
}
void TableViewColumnProperties::Visibility(winrt::Visibility const& value)
{
[[gsl::suppress(con)]]
{
static_cast<TableViewColumn*>(this)->SetValue(s_VisibilityProperty, ValueHelper<winrt::Visibility>::BoxValueIfNecessary(value));
}
}
winrt::Visibility TableViewColumnProperties::Visibility()
{
return ValueHelper<winrt::Visibility>::CastOrUnbox(static_cast<TableViewColumn*>(this)->GetValue(s_VisibilityProperty));
}
void TableViewColumnProperties::Width(winrt::GridLength const& value)
{
[[gsl::suppress(con)]]
{
static_cast<TableViewColumn*>(this)->SetValue(s_WidthProperty, ValueHelper<winrt::GridLength>::BoxValueIfNecessary(value));
}
}
winrt::GridLength TableViewColumnProperties::Width()
{
return ValueHelper<winrt::GridLength>::CastOrUnbox(static_cast<TableViewColumn*>(this)->GetValue(s_WidthProperty));
}