Add HistoryItemDetailsAdorner
ADD
WalletWasabi.Fluent/Behaviors/HistoryItemDetailsBehavior.cs
+using System.Reactive.Disposables;
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Controls.Primitives;
+using Avalonia.Input;
+using DataBox;
+
+namespace WalletWasabi.Fluent.Behaviors
+{
+ public class HistoryItemDetailsAdorner : TemplatedControl
+ {
+ public static readonly StyledProperty<DataBoxRow?> RowProperty =
+ AvaloniaProperty.Register<HistoryItemDetailsAdorner, DataBoxRow?>(nameof(Row));
+
+ public DataBoxRow? Row
+ {
+ get => GetValue(RowProperty);
+ set => SetValue(RowProperty, value);
+ }
+
+ protected override Size MeasureOverride(Size availableSize)
+ {
+ if (Row is null)
+ {
+ return availableSize;
+ }
+
+ var bounds = Row.Bounds;
+
+ availableSize.WithHeight(bounds.Height);
+
+ var result = availableSize;
+
+ foreach (var visualChild in VisualChildren)
+ {
+ if (visualChild is Control control)
+ {
+ control.Measure(availableSize);
+ result = control.DesiredSize;
+ }
+ }
+
+ return result;
+ }
+
+ protected override Size ArrangeOverride(Size finalSize)
+ {
+ if (Row is null)
+ {
+ return finalSize;
+ }
+
+ var bounds = Row.Bounds;
+
+ finalSize.WithHeight(bounds.Height);
+
+ var rect = new Rect(-finalSize.Width, 0, finalSize.Width, bounds.Height);
+
+ var result = finalSize;
+
+ foreach (var visualChild in VisualChildren)
+ {
+ if (visualChild is Control control)
+ {
+ control.Arrange(rect);
+ result = control.DesiredSize;
+ }
+ }
+
+ return result;
+ }
+ }
+
+ public class HistoryItemDetailsBehavior : DisposingBehavior<DataBoxRow>
+ {
+ private HistoryItemDetailsAdorner? _historyItemDetailsAdorner;
+
+ protected override void OnAttached(CompositeDisposable disposables)
+ {
+ base.OnAttached();
+
+ if (AssociatedObject is not null)
+ {
+ disposables.Add(
+ AssociatedObject
+ .GetObservable(InputElement.IsPointerOverProperty)
+ .Subscribe(x =>
+ {
+ if (x)
+ {
+ AddAdorner(AssociatedObject);
+ }
+ else
+ {
+ RemoveAdorner(AssociatedObject);
+ }
+ }));
+ }
+ }
+ private void AddAdorner(DataBoxRow dataBoxRow)
+ {
+ var layer = AdornerLayer.GetAdornerLayer(dataBoxRow);
+ if (layer is null)
+ {
+ return;
+ }
+
+ _historyItemDetailsAdorner = new HistoryItemDetailsAdorner
+ {
+ [AdornerLayer.AdornedElementProperty] = dataBoxRow,
+ IsHitTestVisible = true,
+ ClipToBounds = false,
+ Row = dataBoxRow
+ };
+
+ ((ISetLogicalParent)_historyItemDetailsAdorner).SetParent(dataBoxRow);
+ layer.Children.Add(_historyItemDetailsAdorner);
+ }
+
+ private void RemoveAdorner(DataBoxRow dataBoxRow)
+ {
+ var layer = AdornerLayer.GetAdornerLayer(dataBoxRow);
+ if (layer is null || _historyItemDetailsAdorner is null)
+ {
+ return;
+ }
+
+ layer.Children.Remove(_historyItemDetailsAdorner);
+ ((ISetLogicalParent)_historyItemDetailsAdorner).SetParent(null);
+ _historyItemDetailsAdorner = null;
+ }
+ }
+}

MODIFY
WalletWasabi.Fluent/Views/Wallets/Home/History/HistoryTable.axaml
WalletWasabi.Fluent/Views/Wallets/Home/History/HistoryTable.axaml
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:i="clr-namespace:Avalonia.Xaml.Interactivity;assembly=Avalonia.Xaml.Interactivity"
- xmlns:ir="clr-namespace:Avalonia.Xaml.Interactions.Responsive;assembly=Avalonia.Xaml.Interactions"
xmlns:c="using:WalletWasabi.Fluent.Controls"
xmlns:history="clr-namespace:WalletWasabi.Fluent.ViewModels.Wallets.Home.History"
xmlns:converters="clr-namespace:WalletWasabi.Fluent.Converters"
xmlns:historyItems="clr-namespace:WalletWasabi.Fluent.ViewModels.Wallets.Home.History.HistoryItems"
+ xmlns:behaviors="clr-namespace:WalletWasabi.Fluent.Behaviors"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:DataType="history:HistoryViewModel"
x:CompileBindings="True"
<DataBox Items="{Binding Transactions}"
SelectedItem="{Binding SelectedItem}"
CanUserResizeColumns="False"
- Margin="-40 0 0 0"
+ Margin="0 0 0 0"
DockPanel.Dock="Bottom">
<DataBox.Styles>
<Style Selector="PathIcon">
<Style Selector="PathIcon.hidden">
<Setter Property="IsVisible" Value="False"/>
</Style>
+
+ <Style Selector="DataBoxRow">
+ <Setter Property="(i:Interaction.Behaviors)">
+ <i:BehaviorCollectionTemplate>
+ <i:BehaviorCollection>
+ <behaviors:HistoryItemDetailsBehavior />
+ </i:BehaviorCollection>
+ </i:BehaviorCollectionTemplate>
+ </Setter>
+ </Style>
+
+ <Style Selector="behaviors|HistoryItemDetailsAdorner">
+ <Setter Property="Template">
+ <ControlTemplate>
+ <Button x:DataType="historyItems:HistoryItemViewModelBase" Classes="plain" ToolTip.Tip="Show Details"
+ Command="{Binding ShowDetailsCommand}">
+ <PathIcon Data="{StaticResource details_regular}" Height="15" Opacity="0.6" />
+ </Button>
+ </ControlTemplate>
+ </Setter>
+ </Style>
+
</DataBox.Styles>
<DataBox.Columns>
<DataBoxTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
+ <!--
<Button x:DataType="historyItems:HistoryItemViewModelBase" Classes="plain historyDetails" ToolTip.Tip="Show Details"
Command="{Binding ShowDetailsCommand}">
<PathIcon Data="{StaticResource details_regular}" Height="15" Opacity="0.6" />
</Button>
+ -->
<Panel x:DataType="historyItems:HistoryItemViewModelBase">
<!-- Confirmed -->
<PathIcon IsVisible="{Binding IsConfirmed}"

Add HistoryItemDetailsAdorner