AX Agent 메시지 메타와 완료 카드 문구 추가 정리
Some checks failed
Release Gate / gate (push) Has been cancelled

- 메시지 버블 패딩, 코너, 폰트, 타임스탬프와 assistant 헤더 메타를 더 축소해 본문 중심 흐름 강화

- 작업 요약 팝업의 완료 카드 라벨과 run/step 메타를 더 짧고 가볍게 정리

- README와 DEVELOPMENT 문서에 2026-04-05 17:33 (KST) 기준 이력 반영

- 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\ (경고 0 / 오류 0)
This commit is contained in:
2026-04-05 15:01:05 +09:00
parent d575139a6f
commit cd1db562b1
3 changed files with 47 additions and 37 deletions

View File

@@ -818,6 +818,9 @@ ow + toggle 시각 언어로 통일했습니다.
- 같은 축으로 Cowork/Code 보조 상태 레이어를 한 번 더 눌렀습니다. [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 의 `ConversationStatusStrip`, `ConversationQuickStrip`, `AgentProgressBar`, `RuntimeActivityBadge`, `LastCompletedLabel`, `ExecutionLog`, `SubAgentIndicator`, `StatusElapsed`, `StatusTokens`는 패딩·폰트·간격을 추가로 줄여 상시 노출돼도 본문보다 덜 튀도록 정리했습니다. - 같은 축으로 Cowork/Code 보조 상태 레이어를 한 번 더 눌렀습니다. [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 의 `ConversationStatusStrip`, `ConversationQuickStrip`, `AgentProgressBar`, `RuntimeActivityBadge`, `LastCompletedLabel`, `ExecutionLog`, `SubAgentIndicator`, `StatusElapsed`, `StatusTokens`는 패딩·폰트·간격을 추가로 줄여 상시 노출돼도 본문보다 덜 튀도록 정리했습니다.
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs)의 `ShowTaskSummaryPopup()`, `CreateTaskSummaryActionButton(...)`, `BuildHookSummaryCard(...)`, `BuildActiveBackgroundSummaryCard(...)`, `BuildRecentBackgroundJobCard(...)` 도 같은 시각 언어로 다시 줄였습니다. 팝업 헤더/필터/최근 실행 카드/백그라운드 카드/훅 카드의 라운드, 패딩, 마진, 텍스트 크기를 전반적으로 낮춰 작업 요약이 진단용 보조 패널에 더 가깝게 보이게 했습니다. - [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs)의 `ShowTaskSummaryPopup()`, `CreateTaskSummaryActionButton(...)`, `BuildHookSummaryCard(...)`, `BuildActiveBackgroundSummaryCard(...)`, `BuildRecentBackgroundJobCard(...)` 도 같은 시각 언어로 다시 줄였습니다. 팝업 헤더/필터/최근 실행 카드/백그라운드 카드/훅 카드의 라운드, 패딩, 마진, 텍스트 크기를 전반적으로 낮춰 작업 요약이 진단용 보조 패널에 더 가깝게 보이게 했습니다.
- 업데이트: 2026-04-05 17:27 (KST) - 업데이트: 2026-04-05 17:27 (KST)
- 메시지 자체 메타와 완료 카드 문구도 더 `claw-code` 쪽으로 눌렀습니다. [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs)의 `AddMessageBubble(...)` 에서 사용자/assistant 버블 패딩, 코너, 폰트, 타임스탬프, assistant 헤더 아이콘/이름 크기를 한 단계 더 낮춰 본문 텍스트가 더 먼저 읽히도록 조정했습니다.
- 작업 요약 팝업의 완료 카드도 `실행 run`, `최근 실패`, `최근 실행`, `로그`, `파일`, `후속 큐`, `다시 시도`, `타임라인`처럼 더 짧은 문구로 정리했고, run/step 메타와 요약 텍스트 폰트도 함께 낮춰 정보 밀도를 더 가볍게 맞췄습니다.
- 업데이트: 2026-04-05 17:33 (KST)
- 좌측 패널과 하단 바도 `claw-code` 쪽 밀도로 다시 맞췄습니다. [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 에서 사이드바 폭을 줄이고, 헤더 앱 배지를 강조색 채운 정사각형 대신 `HintBackground + BorderColor` 기반의 작은 배지형으로 바꿨습니다. - 좌측 패널과 하단 바도 `claw-code` 쪽 밀도로 다시 맞췄습니다. [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 에서 사이드바 폭을 줄이고, 헤더 앱 배지를 강조색 채운 정사각형 대신 `HintBackground + BorderColor` 기반의 작은 배지형으로 바꿨습니다.
- `새 대화`, `검색`, `작업 유형/워크스페이스`, 하단 사용자 영역, 삭제 영역까지 패딩과 폰트, 아이콘 크기를 함께 낮췄고, 하단 상태바는 다이아몬드 아이콘을 작은 원형 점으로 바꿔 더 단순한 상태선처럼 보이게 정리했습니다. - `새 대화`, `검색`, `작업 유형/워크스페이스`, 하단 사용자 영역, 삭제 영역까지 패딩과 폰트, 아이콘 크기를 함께 낮췄고, 하단 상태바는 다이아몬드 아이콘을 작은 원형 점으로 바꿔 더 단순한 상태선처럼 보이게 정리했습니다.
- 실행 로그 배너도 본문 침범을 더 줄였습니다. [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs)의 `AddAgentEventBanner(...)` 에서 debug 전용 `ToolInput` 카드 길이를 더 짧게 줄였고, `FilePath`는 일반 로그에서는 빠른 액션이 붙은 카드형 대신 파일명 한 줄만 약하게 표시하도록 바꿨습니다. - 실행 로그 배너도 본문 침범을 더 줄였습니다. [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs)의 `AddAgentEventBanner(...)` 에서 debug 전용 `ToolInput` 카드 길이를 더 짧게 줄였고, `FilePath`는 일반 로그에서는 빠른 액션이 붙은 카드형 대신 파일명 한 줄만 약하게 표시하도록 바꿨습니다.

View File

@@ -4592,3 +4592,7 @@ ow + toggle ?쒓컖 ?몄뼱濡??ㅼ떆 ?뺣젹?덈떎.
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs)의 `ShowTaskSummaryPopup()`, `CreateTaskSummaryActionButton(...)`, `BuildHookSummaryCard(...)`, `BuildActiveBackgroundSummaryCard(...)`, `BuildRecentBackgroundJobCard(...)`는 팝업 헤더, 필터 칩, 최근 실행 카드, 훅/백그라운드 카드의 라운드·패딩·마진·글자 크기를 다시 줄여 작업 요약이 상태 대시보드보다 진단용 팝업에 가깝게 보이도록 맞췄습니다. - [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs)의 `ShowTaskSummaryPopup()`, `CreateTaskSummaryActionButton(...)`, `BuildHookSummaryCard(...)`, `BuildActiveBackgroundSummaryCard(...)`, `BuildRecentBackgroundJobCard(...)`는 팝업 헤더, 필터 칩, 최근 실행 카드, 훅/백그라운드 카드의 라운드·패딩·마진·글자 크기를 다시 줄여 작업 요약이 상태 대시보드보다 진단용 팝업에 가깝게 보이도록 맞췄습니다.
- 검증 예정: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\` - 검증 예정: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\`
- 업데이트: 2026-04-05 17:27 (KST) - 업데이트: 2026-04-05 17:27 (KST)
- 메시지 행 메타와 완료 카드 라벨도 한 단계 더 줄였습니다. [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs)의 `AddMessageBubble(...)` 에서 사용자/assistant 버블 패딩, 코너, 폰트, 타임스탬프, assistant 헤더 아이콘/이름 크기를 추가로 낮춰 본문 텍스트가 더 먼저 읽히도록 조정했습니다.
- 작업 요약 팝업의 완료 카드도 `실행 run`, `최근 실패`, `최근 실행`, `로그`, `파일`, `후속 큐`, `다시 시도`, `타임라인`처럼 더 짧은 라벨로 바꾸고, run/step 메타와 요약 텍스트 폰트도 함께 낮춰 전체 밀도를 더 가볍게 정리했습니다.
- 검증 예정: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\`
- 업데이트: 2026-04-05 17:33 (KST)

View File

@@ -4386,7 +4386,7 @@ public partial class ChatWindow : Window
{ {
HorizontalAlignment = HorizontalAlignment.Right, HorizontalAlignment = HorizontalAlignment.Right,
MaxWidth = GetMessageMaxWidth(), MaxWidth = GetMessageMaxWidth(),
Margin = new Thickness(196, 2, 12, 2), Margin = new Thickness(208, 2, 12, 2),
}; };
var bubble = new Border var bubble = new Border
@@ -4394,16 +4394,16 @@ public partial class ChatWindow : Window
Background = userBubbleBg, Background = userBubbleBg,
BorderBrush = borderBrush, BorderBrush = borderBrush,
BorderThickness = new Thickness(1), BorderThickness = new Thickness(1),
CornerRadius = new CornerRadius(12), CornerRadius = new CornerRadius(11),
Padding = new Thickness(11, 7, 11, 7), Padding = new Thickness(10, 6.5, 10, 6.5),
Child = new TextBlock Child = new TextBlock
{ {
Text = content, Text = content,
TextAlignment = TextAlignment.Left, TextAlignment = TextAlignment.Left,
FontSize = 11.5, FontSize = 11.25,
Foreground = primaryText, Foreground = primaryText,
TextWrapping = TextWrapping.Wrap, TextWrapping = TextWrapping.Wrap,
LineHeight = 18, LineHeight = 17.5,
} }
}; };
wrapper.Children.Add(bubble); wrapper.Children.Add(bubble);
@@ -4431,11 +4431,11 @@ public partial class ChatWindow : Window
userBottomBar.Children.Add(new TextBlock userBottomBar.Children.Add(new TextBlock
{ {
Text = timestamp.ToString("HH:mm"), Text = timestamp.ToString("HH:mm"),
FontSize = 8, Opacity = 0.42, FontSize = 7.5, Opacity = 0.36,
Foreground = TryFindResource("SecondaryText") as Brush ?? Brushes.Gray, Foreground = TryFindResource("SecondaryText") as Brush ?? Brushes.Gray,
HorizontalAlignment = HorizontalAlignment.Right, HorizontalAlignment = HorizontalAlignment.Right,
VerticalAlignment = VerticalAlignment.Center, VerticalAlignment = VerticalAlignment.Center,
Margin = new Thickness(0, 0, 3, 0), Margin = new Thickness(0, 0, 2, 0),
}); });
userBottomBar.Children.Add(userActionBar); userBottomBar.Children.Add(userActionBar);
wrapper.Children.Add(userBottomBar); wrapper.Children.Add(userBottomBar);
@@ -4469,19 +4469,19 @@ public partial class ChatWindow : Window
{ {
HorizontalAlignment = HorizontalAlignment.Left, HorizontalAlignment = HorizontalAlignment.Left,
MaxWidth = GetMessageMaxWidth(), MaxWidth = GetMessageMaxWidth(),
Margin = new Thickness(4, 2, 164, 2) Margin = new Thickness(4, 2, 178, 2)
}; };
if (animate) ApplyMessageEntryAnimation(container); if (animate) ApplyMessageEntryAnimation(container);
// AI 에이전트 이름 + 아이콘 // AI 에이전트 이름 + 아이콘
var (agentName, _, _) = GetAgentIdentity(); var (agentName, _, _) = GetAgentIdentity();
var headerSp = new StackPanel { Orientation = Orientation.Horizontal, Margin = new Thickness(2, 0, 0, 1) }; var headerSp = new StackPanel { Orientation = Orientation.Horizontal, Margin = new Thickness(2, 0, 0, 0.5) };
var iconBlock = new TextBlock var iconBlock = new TextBlock
{ {
Text = "\uE945", Text = "\uE945",
FontFamily = new FontFamily("Segoe MDL2 Assets"), FontFamily = new FontFamily("Segoe MDL2 Assets"),
FontSize = 7, FontSize = 6.5,
Foreground = secondaryText, Foreground = secondaryText,
VerticalAlignment = VerticalAlignment.Center, VerticalAlignment = VerticalAlignment.Center,
}; };
@@ -4490,10 +4490,10 @@ public partial class ChatWindow : Window
headerSp.Children.Add(new TextBlock headerSp.Children.Add(new TextBlock
{ {
Text = agentName, Text = agentName,
FontSize = 8, FontSize = 7.5,
FontWeight = FontWeights.Normal, FontWeight = FontWeights.Normal,
Foreground = secondaryText, Foreground = secondaryText,
Margin = new Thickness(3, 0, 0, 0), Margin = new Thickness(2.5, 0, 0, 0),
VerticalAlignment = VerticalAlignment.Center, VerticalAlignment = VerticalAlignment.Center,
}); });
container.Children.Add(headerSp); container.Children.Add(headerSp);
@@ -4503,8 +4503,8 @@ public partial class ChatWindow : Window
Background = assistantBubbleBg, Background = assistantBubbleBg,
BorderBrush = borderBrush, BorderBrush = borderBrush,
BorderThickness = new Thickness(1), BorderThickness = new Thickness(1),
CornerRadius = new CornerRadius(12), CornerRadius = new CornerRadius(11),
Padding = new Thickness(11, 7, 11, 7), Padding = new Thickness(10, 6.5, 10, 6.5),
}; };
var contentStack = new StackPanel(); var contentStack = new StackPanel();
@@ -4633,7 +4633,7 @@ public partial class ChatWindow : Window
{ {
Orientation = Orientation.Horizontal, Orientation = Orientation.Horizontal,
HorizontalAlignment = HorizontalAlignment.Left, HorizontalAlignment = HorizontalAlignment.Left,
Margin = new Thickness(2, 1, 0, 0), Margin = new Thickness(2, 0.5, 0, 0),
Opacity = 0 Opacity = 0
}; };
@@ -4653,10 +4653,10 @@ public partial class ChatWindow : Window
actionBar.Children.Add(new TextBlock actionBar.Children.Add(new TextBlock
{ {
Text = aiTimestamp.ToString("HH:mm"), Text = aiTimestamp.ToString("HH:mm"),
FontSize = 8.5, Opacity = 0.46, FontSize = 7.75, Opacity = 0.38,
Foreground = btnColor, Foreground = btnColor,
VerticalAlignment = VerticalAlignment.Center, VerticalAlignment = VerticalAlignment.Center,
Margin = new Thickness(4, 0, 0, 0), Margin = new Thickness(3, 0, 0, 0),
}); });
container.Children.Add(actionBar); container.Children.Add(actionBar);
@@ -20150,16 +20150,17 @@ private static (string icon, string label, string bgHex, string fgHex) GetDecisi
{ {
new TextBlock new TextBlock
{ {
Text = $"현재 실행 run {ShortRunId(_appState.AgentRun.RunId)}", Text = $"실행 run {ShortRunId(_appState.AgentRun.RunId)}",
FontWeight = FontWeights.SemiBold, FontWeight = FontWeights.SemiBold,
Foreground = primaryText, Foreground = primaryText,
FontSize = 9.75,
}, },
new TextBlock new TextBlock
{ {
Text = $"{GetRunStatusLabel(_appState.AgentRun.Status)} · iteration {_appState.AgentRun.LastIteration}", Text = $"{GetRunStatusLabel(_appState.AgentRun.Status)} · step {_appState.AgentRun.LastIteration}",
Margin = new Thickness(0, 2, 0, 0), Margin = new Thickness(0, 2, 0, 0),
Foreground = GetRunStatusBrush(_appState.AgentRun.Status), Foreground = GetRunStatusBrush(_appState.AgentRun.Status),
FontSize = 9.5, FontSize = 9,
}, },
new TextBlock new TextBlock
{ {
@@ -20167,7 +20168,7 @@ private static (string icon, string label, string bgHex, string fgHex) GetDecisi
Margin = new Thickness(0, 3, 0, 0), Margin = new Thickness(0, 3, 0, 0),
TextWrapping = TextWrapping.Wrap, TextWrapping = TextWrapping.Wrap,
Foreground = Brushes.DimGray, Foreground = Brushes.DimGray,
FontSize = 9.5, FontSize = 9,
} }
} }
} }
@@ -20195,16 +20196,17 @@ private static (string icon, string label, string bgHex, string fgHex) GetDecisi
{ {
new TextBlock new TextBlock
{ {
Text = $"최근 실패 원인 · run {ShortRunId(latestFailedRun.RunId)}", Text = $"최근 실패 · run {ShortRunId(latestFailedRun.RunId)}",
FontWeight = FontWeights.SemiBold, FontWeight = FontWeights.SemiBold,
Foreground = BrushFromHex("#991B1B"), Foreground = BrushFromHex("#991B1B"),
FontSize = 9.75,
}, },
new TextBlock new TextBlock
{ {
Text = $"{latestFailedRun.UpdatedAt:HH:mm:ss} · iteration {latestFailedRun.LastIteration}", Text = $"{latestFailedRun.UpdatedAt:HH:mm:ss} · step {latestFailedRun.LastIteration}",
Margin = new Thickness(0, 2, 0, 0), Margin = new Thickness(0, 2, 0, 0),
Foreground = BrushFromHex("#B45309"), Foreground = BrushFromHex("#B45309"),
FontSize = 9.25, FontSize = 8.75,
}, },
new TextBlock new TextBlock
{ {
@@ -20212,7 +20214,7 @@ private static (string icon, string label, string bgHex, string fgHex) GetDecisi
Margin = new Thickness(0, 3, 0, 0), Margin = new Thickness(0, 3, 0, 0),
TextWrapping = TextWrapping.Wrap, TextWrapping = TextWrapping.Wrap,
Foreground = secondaryText, Foreground = secondaryText,
FontSize = 9.25, FontSize = 8.9,
} }
} }
} }
@@ -20221,8 +20223,8 @@ private static (string icon, string label, string bgHex, string fgHex) GetDecisi
panel.Children.Add(new TextBlock panel.Children.Add(new TextBlock
{ {
Text = "최근 에이전트 실행", Text = "최근 실행",
FontSize = 10, FontSize = 9.5,
FontWeight = FontWeights.SemiBold, FontWeight = FontWeights.SemiBold,
Foreground = Brushes.DimGray, Foreground = Brushes.DimGray,
Margin = new Thickness(8, 0, 8, 2), Margin = new Thickness(8, 0, 8, 2),
@@ -20242,13 +20244,14 @@ private static (string icon, string label, string bgHex, string fgHex) GetDecisi
Text = runDisplay.HeaderText, Text = runDisplay.HeaderText,
FontWeight = FontWeights.SemiBold, FontWeight = FontWeights.SemiBold,
Foreground = GetRunStatusBrush(run.Status), Foreground = GetRunStatusBrush(run.Status),
FontSize = 9.75,
}, },
new TextBlock new TextBlock
{ {
Text = runDisplay.MetaText, Text = runDisplay.MetaText,
Margin = new Thickness(0, 2, 0, 0), Margin = new Thickness(0, 2, 0, 0),
Foreground = secondaryText, Foreground = secondaryText,
FontSize = 9.25, FontSize = 8.75,
}, },
new TextBlock new TextBlock
{ {
@@ -20256,7 +20259,7 @@ private static (string icon, string label, string bgHex, string fgHex) GetDecisi
Margin = new Thickness(0, 2, 0, 0), Margin = new Thickness(0, 2, 0, 0),
TextWrapping = TextWrapping.Wrap, TextWrapping = TextWrapping.Wrap,
Foreground = secondaryText, Foreground = secondaryText,
FontSize = 9.25, FontSize = 8.9,
} }
} }
}; };
@@ -20266,8 +20269,8 @@ private static (string icon, string label, string bgHex, string fgHex) GetDecisi
var activitySummary = new StackPanel(); var activitySummary = new StackPanel();
activitySummary.Children.Add(new TextBlock activitySummary.Children.Add(new TextBlock
{ {
Text = $"실행 로그 {runEvents.Count} · 관련 파일 {runFilePaths.Count}", Text = $"로그 {runEvents.Count} · 파일 {runFilePaths.Count}",
FontSize = 8.75, FontSize = 8.4,
Foreground = secondaryText, Foreground = secondaryText,
}); });
@@ -20275,13 +20278,13 @@ private static (string icon, string label, string bgHex, string fgHex) GetDecisi
{ {
var capturedRunId = run.RunId; var capturedRunId = run.RunId;
var timelineButton = CreateTaskSummaryActionButton( var timelineButton = CreateTaskSummaryActionButton(
"타임라인 보기", "타임라인",
"#F8FAFC", "#F8FAFC",
"#CBD5E1", "#CBD5E1",
"#334155", "#334155",
(_, _) => ScrollToRunInTimeline(capturedRunId), (_, _) => ScrollToRunInTimeline(capturedRunId),
trailingMargin: false); trailingMargin: false);
timelineButton.Margin = new Thickness(0, 6, 0, 0); timelineButton.Margin = new Thickness(0, 5, 0, 0);
activitySummary.Children.Add(timelineButton); activitySummary.Children.Add(timelineButton);
} }
@@ -20301,20 +20304,20 @@ private static (string icon, string label, string bgHex, string fgHex) GetDecisi
{ {
var capturedRun = run; var capturedRun = run;
var followUpButton = CreateTaskSummaryActionButton( var followUpButton = CreateTaskSummaryActionButton(
"후속 작업 큐에 넣기", "후속 ",
"#ECFDF5", "#ECFDF5",
"#BBF7D0", "#BBF7D0",
"#166534", "#166534",
(_, _) => EnqueueFollowUpFromRun(capturedRun), (_, _) => EnqueueFollowUpFromRun(capturedRun),
trailingMargin: false); trailingMargin: false);
followUpButton.Margin = new Thickness(0, 8, 0, 0); followUpButton.Margin = new Thickness(0, 6, 0, 0);
runCardStack.Children.Add(followUpButton); runCardStack.Children.Add(followUpButton);
} }
if (string.Equals(run.Status, "failed", StringComparison.OrdinalIgnoreCase) && CanRetryCurrentConversation()) if (string.Equals(run.Status, "failed", StringComparison.OrdinalIgnoreCase) && CanRetryCurrentConversation())
{ {
var retryButton = CreateTaskSummaryActionButton( var retryButton = CreateTaskSummaryActionButton(
"이 실행 다시 시도", "다시 시도",
"#FEF2F2", "#FEF2F2",
"#FCA5A5", "#FCA5A5",
"#991B1B", "#991B1B",
@@ -20324,7 +20327,7 @@ private static (string icon, string label, string bgHex, string fgHex) GetDecisi
RetryLastUserMessageFromConversation(); RetryLastUserMessageFromConversation();
}, },
trailingMargin: false); trailingMargin: false);
retryButton.Margin = new Thickness(0, 8, 0, 0); retryButton.Margin = new Thickness(0, 6, 0, 0);
runCardStack.Children.Add(retryButton); runCardStack.Children.Add(retryButton);
} }