Использование / вызов метода / функции страницы на другой странице в C#

Я сделал небольшое приложение UWP, в котором есть страница настроек для NavigationView. В нем я сделал слайдер, который позволяет пользователю изменять прозрачность акрила (TintOpacity) фона страницы (или в основном NavigationView.Background). Но у меня ошибка

CS0120: An object reference is required for the non-static field, method or property 'MainPage.ChangeAcrylicOpacity(double)'

<!-- MainPage.xaml -->
<NavigationView
    x:Name="NavView"
    ItemInvoked="NavView_ItemInvoked"
    Loaded="NavView_Loaded"> <!-- and some other attributes -->
// MainPage.xaml.cs
public void ChangeAcrylicOpacity(double tintOpacity)
{
    AcrylicBrush acrylicBrush = NavView.Background as AcrylicBrush;
    acrylicBrush.TintOpacity = tintOpacity;
}

//-----------------------------------------------------------------------------------------------------------------

// Settings.xaml.cs
private void Slider_AcrylicValueChanged(object sender, RangeBaseValueChangedEventArgs e)
{
    Slider slider = sender as Slider;
    double tintOpacity = slider.Value;
    MainPage.ChangeAcrylicOpacity(tintOpacity);
}

Ошибка в Settings.xaml.cs > Slider_AcrylicValueChanged > MainPage.ChangeAcrylicOpacity(tintOpacity);

И эта ошибка возникает, когда я меняю MainPage.xaml.cs > ChangeAcrylicOpacity(double tintOpacity) из public к private, но выдает ошибку 'MainPage.ChangeAcrylicOpacity(double)' is inaccessible due to its protection level

Пожалуйста, предложите несколько способов безошибочно использовать функции одной страницы на другой странице. Примечание. Я уже искал в Интернете, но ни один сайт не решил мою проблему (включая Stackru).

1 ответ

Попробуйте определить свойство MainPage в классе Settings, чтобы через него можно было получить доступ к MainPage. Кстати, модификатор доступа для ChangeAcrylicOpacity() в этом случае должен быть либо "общедоступным", либо "внутренним".

// Settings.xaml.cs
private MainPage MainPage
{
    get { return (Window.Current.Content as Frame)?.Content as MainPage; }
}
private void Slider_AcrylicValueChanged(object sender, RangeBaseValueChangedEventArgs e)
{
    Slider slider = sender as Slider;
    double tintOpacity = slider.Value;
    MainPage.ChangeAcrylicOpacity(tintOpacity);
}
Другие вопросы по тегам