Использование / вызов метода / функции страницы на другой странице в 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);
}