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

Я сделал небольшое приложение UWP, у которого есть страница настроек для его NavigationView. В нем я сделал Slider, который позволяет пользователю изменять прозрачность Acryli c (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

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

1 Ответ

1 голос
/ 15 марта 2020

Попробуйте определить свойство «MainPage» в классе «Настройки», чтобы через него можно было получить доступ к главной странице. Кстати, модификатор доступа для ChangeAcrylicOpacity () должен быть в этом случае либо «publi c», либо «внутренним».

// 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...