|
586 | 586 | root (Border.detailedRow) carries Container.Name + Container.Sizing=Width |
587 | 587 | so it measures its own width; repeated cards share the name. The card Grid |
588 | 588 | has three columns (grip, thumbnail, content); these default (wide) styles |
589 | | - set the large-card state: a 112-DIP thumbnail spanning all three content |
590 | | - rows in the thumbnail column, and the right-column action strip in the |
591 | | - content column. Width, height, row span, action column, and action column |
592 | | - span are set HERE (not as local values on the elements) so the |
| 589 | + set the large-card state: a 192x108 DIP 16:9 thumbnail spanning all three |
| 590 | + content rows in the thumbnail column, and the right-column action strip |
| 591 | + in the content column. Width, height, row span, action column, and action |
| 592 | + column span are set HERE (not as local values on the elements) so the |
593 | 593 | ContainerQuery below can override them; local values outrank styles and |
594 | 594 | would defeat the query. |
595 | 595 | --> |
596 | 596 | <Style Selector="Border.detailedThumb"> |
597 | | - <Setter Property="Width" Value="112" /> |
598 | | - <Setter Property="Height" Value="112" /> |
| 597 | + <Setter Property="Width" Value="192" /> |
| 598 | + <Setter Property="Height" Value="108" /> |
599 | 599 | <Setter Property="Grid.RowSpan" Value="3" /> |
600 | 600 | </Style> |
601 | 601 | <Style Selector="Path.detailedPlaceholder"> |
|
620 | 620 | </Style> |
621 | 621 | <!-- |
622 | 622 | Constrained state (card width at or below 680 DIP): the thumbnail shrinks |
623 | | - to 72 DIP and spans only name + summary; the single action strip moves to |
624 | | - a full-width row beneath all three columns. The query targets descendants |
| 623 | + to 128x72 DIP (still 16:9) and spans only name + summary; the single |
| 624 | + action strip moves to a full-width row beneath all three columns. The |
| 625 | + query targets descendants |
625 | 626 | of the named card root, never the queried Border itself, so the card chrome |
626 | 627 | is untouched. Declared after the wide defaults so its setters win while the |
627 | 628 | query is active. |
628 | 629 | --> |
629 | 630 | <ContainerQuery Name="detailedModRow" Query="max-width:680"> |
630 | 631 | <Style Selector="Border.detailedThumb"> |
631 | | - <Setter Property="Width" Value="72" /> |
| 632 | + <Setter Property="Width" Value="128" /> |
632 | 633 | <Setter Property="Height" Value="72" /> |
633 | 634 | <Setter Property="Grid.RowSpan" Value="2" /> |
634 | 635 | </Style> |
|
1362 | 1363 | ContentTemplate="{StaticResource ModRowGripTemplate}" /> |
1363 | 1364 |
|
1364 | 1365 | <!-- |
1365 | | - Thumbnail area (column 1). A rounded, clipped square |
1366 | | - whose Width, Height, and Grid.RowSpan come from the |
1367 | | - Border.detailedThumb styles (112 DIP spanning all three |
1368 | | - rows when wide; 72 DIP spanning name + summary when |
1369 | | - constrained). Border implements |
| 1366 | + Thumbnail area (column 1). A rounded, clipped 16:9 |
| 1367 | + frame whose Width, Height, and Grid.RowSpan come from the |
| 1368 | + Border.detailedThumb styles (192x108 DIP spanning all |
| 1369 | + three rows when wide; 128x72 DIP spanning name + summary |
| 1370 | + when constrained). Border implements |
1370 | 1371 | IVisualWithRoundRectClip with ClipToBoundsRadius mapped |
1371 | 1372 | to CornerRadius, so ClipToBounds clips the child to the |
1372 | | - rounded boundary. The Image shows only when a thumbnail |
1373 | | - has been decoded; every no-image case (Untracked/Linked, |
| 1373 | + rounded boundary. The Image stretches Uniform so the |
| 1374 | + complete source image is always visible; the frame's |
| 1375 | + neutral background supplies the letterbox/pillarbox |
| 1376 | + space for non-16:9 assets. The Image shows only when a |
| 1377 | + thumbnail has been decoded; every no-image case |
| 1378 | + (Untracked/Linked, |
1374 | 1379 | missing metadata, no auth, offline, failed image, adult |
1375 | 1380 | flag, empty URL) shows the same neutral drawn-geometry |
1376 | 1381 | placeholder in the same box. Adult rows never receive a |
|
1383 | 1388 | HorizontalAlignment="Left" VerticalAlignment="Top" |
1384 | 1389 | Background="{DynamicResource SystemControlBackgroundBaseMediumLowBrush}"> |
1385 | 1390 | <Panel> |
1386 | | - <Image Source="{Binding Thumbnail}" Stretch="UniformToFill" |
| 1391 | + <Image Source="{Binding Thumbnail}" Stretch="Uniform" |
1387 | 1392 | IsVisible="{Binding HasThumbnail}" /> |
1388 | 1393 | <!-- |
1389 | 1394 | Neutral placeholder (Material "image", 24x24 source): |
|
0 commit comments