我正在使用Xamarin.Forms开发一个新的非常基本的应用程序,我有一个疑问...我无法弄清楚如何做到这一点,因为我根本没有使用Xamarin的经验。
根据我点击的标签,我得到ContentPage
ContentView
根据哪个Title="[introduce any title]"
更新导航标题很容易,因为我可以使用<ContentPage
...
xmlns:views="clr-namespace:Your.Name.Space"
...>'
但我不知道t在视图上有这个属性。
这基本上是我的代码,我添加了我想添加的视图的命名空间:
<views:NameOfView />
然后在我的网页内容中,我可以像这样使用它:
import { Parent } from './locationofparent'
@Component({selector: 'child'})
export class Child{
constructor(private parent: Parent) { }
x:number;
<!-- may be some code to send the x value // just need to have the parent read it-->
<!-- Remember the value is in a method,which is onclick of a button-->
ngOnInit() {
this.parent.addChild(this);
}
onButtonClick(){
this.x=5;
}
我正在使用自定义标签布局进行底部导航。
我希望你们中的任何一个人都可以用正确的方式。
感谢。
答案 0 :(得分:3)
实现此方法的推荐方法是在viewmodel上使用PageTitle
属性 - 该属性与当前内容视图保持同步;因此它的相应标题。
但是,如果您只想在视图级别实现此功能;然后,您可以通过在内容视图中引入绑定模式为OneWayToSource
的自定义可绑定属性来实现此目的。例如:
public class NavigationView : ContentView
{
public static readonly BindableProperty TitleProperty =
BindableProperty.Create("Title",
typeof(string),
typeof(NavigationView),
defaultValue: null,
defaultBindingMode: BindingMode.OneWayToSource);
public string Title
{
get => (string)GetValue(TitleProperty);
set => SetValue(TitleProperty, value);
}
}
并使用自引用将自定义属性绑定到ContentPage
标题。例如:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
....
x:Name="_self"
Title="{Binding Path=Content.Title, Source={x:Reference _self}}">
或者,将绑定添加到自定义视图以充分利用绑定模式:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
...
x:Name="_self">
...
<local:NavigationView Title="{Binding Path=Title, Source={x:Reference _self}}">
XAML:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:TitleView"
x:Class="TitleView.TitleViewPage"
x:Name="_self"
Title="{Binding Path=Content.Title, Source={x:Reference _self}}">
<local:NavigationView Title="This is page-1">
<Button Text="Go to page-2" Clicked="Handle_Clicked" />
</local:NavigationView>
</ContentPage>
代码隐藏:
public partial class TitleViewPage : ContentPage
{
void Handle_Clicked(object sender, System.EventArgs e)
{
this.Content = new NavigationView {
Title = "This is page-2",
Content = new Button { Text = "Go back to page-1", IsEnabled = false } };
}
public TitleViewPage()
{
InitializeComponent();
}
}
编辑1:还添加了一些代码来说明如何定义从内容视图到页面的绑定。
答案 1 :(得分:1)
正如Gerarld Versluis所说,你必须在ContentPage
上设置标题。只需为每个标签ContentPage
创建两个ContentPage
。然后为每个ContentPage
创建Binding。
<ContentPage Title="{Binding PageTitleFirstPage}" xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="stackoverflow.AboutPage" xmlns:vm="clr-namespace:stackoverflow;">
</ContentPage>
对于第二个ContentPage,如果需要,您也可以在ContentPage中使用ContentView!
<ContentPage Title="{Binding PageTitleSecondPage}" xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="stackoverflow.AboutPage" xmlns:vm="clr-namespace:stackoverflow;">
</ContentPage>
在ViewModel中设置一个包含所需字符串的属性:
public string PageTitleSecondPage => "Second Tab";
<强>更新强> 我读到你想通过在ContentViews之间切换来改变标题。你能告诉我们你的代码吗?因为您可以轻松地将PageTitle设置在ContentView切换的位置。我们假设您正在通过Click切换ContentView,您可以设置PageTitle。但您还必须通知View,此属性已更改。