Как сделать окно регистратора интерактивным и не скрывать за ним карту?C#

Место общения программистов C#
Ответить
Anonymous
 Как сделать окно регистратора интерактивным и не скрывать за ним карту?

Сообщение Anonymous »

Проблема в том, что я использую webview2 с кодом map.html для отображения openstreetmap, а затем, когда я нажимаю кнопку переключения, чтобы отобразить окно журнала, окно журнала всегда находится за картой. один трюк заключался в том, чтобы не показывать карту, когда было открыто окно журнала, а затем снова показывать карту, когда окно журнала было закрыто.
private void BtnToggleLogger_Click(object sender, RoutedEventArgs e)
{
if (LoggerOverlay.Visibility == Visibility.Collapsed)
{
LoggerOverlay.Visibility = Visibility.Visible;

// FIX: hide WebView2 so overlay can appear above everything
MapContainer.Visibility = Visibility.Hidden;
MapView.IsHitTestVisible = false;
}
else
{
LoggerOverlay.Visibility = Visibility.Collapsed;

MapContainer.Visibility = Visibility.Visible;
MapView.IsHitTestVisible = true;
}
}

но это не решение, потому что я хочу показать карту.
Итак, первая проблема заключается в том, как показать окно журнала журнала перед картой?
Вторая проблема заключается в том, что я хочу, чтобы окно журнала журнала было интерактивным, чтобы я мог прокручивать вниз с помощью колеса мыши или использовать полосу прокрутки в окне журнала, а также иметь возможность взаимодействовать с кнопкой на правой стороне панели.
вот почему установите фон окна регистратора становится прозрачным:
Background="Transparent"

а также установите для IsHitTestVisible значение false
IsHitTestVisible="False">

как только я установлю значение false, я смогу взаимодействовать с кнопками справа, но тогда я не смогу взаимодействовать с окном журнала, только видеть окно журнала в виде текста, и если я установлю его в значение True, я могу взаимодействовать с окном журнала, но не с кнопками справа.
скриншот приложения, когда окно журнала журнала выключено:
Изображение

и когда окно регистратора на карте не видно, и я не могу взаимодействовать с ним.
Изображение

это Код mainwindow.xaml окна журнала.

























































и код в файле mainwindow.xaml.cs
private void Log(string msg)
{
string timestamp = DateTime.Now.ToString("HH:mm:ss");
string logEntry = $"[{timestamp}] {msg}";

// Add to UI
TxtLogger.AppendText(logEntry + "\n");

// Auto-scroll to bottom ONLY if user hasn't manually scrolled up
if (!_userScrolled)
{
LogScrollViewer.ScrollToEnd();
}

// Add to buffer
_logBuffer.Add(logEntry);

// Save to file immediately (real-time logging)
try
{
if (_logFilePath != null)
{
File.AppendAllText(_logFilePath, logEntry + Environment.NewLine);
}
}
catch (Exception ex)
{
// If file write fails, show in UI only
TxtLogger.AppendText($"[{timestamp}] ⚠ Log file write failed: {ex.Message}\n");
}
}

// Toggle logger visibility
private void BtnToggleLogger_Click(object sender, RoutedEventArgs e)
{
if (LoggerOverlay.Visibility == Visibility.Collapsed)
{
LoggerOverlay.Visibility = Visibility.Visible;
}
else
{
LoggerOverlay.Visibility = Visibility.Collapsed;
}
}

// Close logger when clicking outside the panel
private void LoggerOverlay_MouseDown(object sender, MouseButtonEventArgs e)
{
LoggerOverlay.Visibility = Visibility.Collapsed;
}

// Enable mouse wheel scrolling
private void LogScrollViewer_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
var scrollViewer = sender as ScrollViewer;
if (scrollViewer == null) return;

// Mark that user manually scrolled
_userScrolled = true;

// Scroll the viewer
if (e.Delta > 0)
{
scrollViewer.LineUp();
scrollViewer.LineUp();
scrollViewer.LineUp();
}
else
{
scrollViewer.LineDown();
scrollViewer.LineDown();
scrollViewer.LineDown();
}

// Check if user scrolled back to bottom
if (scrollViewer.VerticalOffset >= scrollViewer.ScrollableHeight - 1)
{
_userScrolled = false; // Re-enable auto-scroll
}

e.Handled = true;
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... map-behind
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»