打开Frame后,XAML中的汉堡菜单消失

时间:2017-01-17 07:00:53

标签: c# xaml

我创建了这个'汉堡菜单'在XAML中为我的UWP应用程序。我点击菜单项时使用框架显示不同的页面。

我的XAML:

<Grid.Background>
       <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
            <GradientStop Color="#FF298025" Offset="0"/>
            <GradientStop Color="#FF107C10" Offset="1"/>
       </LinearGradientBrush>
</Grid.Background>
<Grid.RowDefinitions>
       <RowDefinition Height="auto" />
       <RowDefinition Height="*" />
</Grid.RowDefinitions>
<RelativePanel>
       <Button x:Name="HamburgerButton" FontFamily="Segoe MDL2 Assets" Content="&#xE700;" FontSize="36" Click="HamburgerButton_Click" />
</RelativePanel>
<SplitView x:Name="MySplitView"
                 Grid.Row="1" 
                 DisplayMode="CompactOverlay" 
                 OpenPaneLength="200" 
                 CompactPaneLength="56" 
                 HorizontalAlignment="Left">
        <SplitView.Pane>
              <ListBox SelectionMode="Single" x:Name="IconsListBox" SelectionChanged="IconsListBox_SelectionChanged">
                 <ListBoxItem x:Name="VoteListBoxItem">
                      <StackPanel Orientation="Horizontal">
                          <TextBlock FontFamily="Segoe MDL2 Assets" FontSize="36" Text="&#xE8E1;" />
                          <TextBlock Text="Vote" FontSize="24" Margin="20,0,0,0" />
                      </StackPanel>
                  </ListBoxItem>
                  <ListBoxItem x:Name="AppDetailsListBoxItem">
                      <StackPanel Orientation="Horizontal">
                          <TextBlock FontFamily="Segoe MDL2 Assets" FontSize="36" Text="&#xE115;" />
                          <TextBlock Text="App Details" FontSize="24" Margin="20,0,0,0" />
                      </StackPanel>
                  </ListBoxItem>
              </ListBox>
        </SplitView.Pane>
        <SplitView.Content>
              <Frame x:Name="ViewFrame" />
        </SplitView.Content>
</SplitView>

我的C#:

private void IconsListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
     ViewFrame = this.Frame;
     if (VoteListBoxItem.IsSelected) { Frame.Navigate(typeof(VotePage)); }
     else if (AppDetailsListBoxItem.IsSelected) { Frame.Navigate(typeof(AppDetailsPage)); }
}

private void HamburgerButton_Click(object sender, RoutedEventArgs e)
{
     MySplitView.IsPaneOpen = !MySplitView.IsPaneOpen;
}

此代码的问题在于,无论何时单击菜单项,页面确实已加载到框架中,而且整个“汉堡菜单”都会出现。消失。

1 个答案:

答案 0 :(得分:1)

您正在使用主框架导航,您应该使用SlipView内容中声明的内容,如下所示:

 public EventAdapter(final List<EventsModel> myDataSet, RecyclerView recyclerView, Context context) {
    mDataset = myDataSet;
    this.context = context;

    if (recyclerView.getLayoutManager() instanceof LinearLayoutManager) {

        final LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);


                totalItemCount = linearLayoutManager.getItemCount();
                lastVisibleItem = linearLayoutManager.findLastVisibleItemPosition();
                if (!loading && totalItemCount <= (lastVisibleItem + visibleThreshold)) {
                    // End has been reached
                    // Do something
                    if (onLoadMoreListener != null) {
                        onLoadMoreListener.onLoadMore();
                    }
                    loading = true;
                }
            }
        });
    }
}

@Override
public int getItemViewType(int position) {
    return mDataset.get(position) != null ? VIEW_ITEM : VIEW_PROG;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    RecyclerView.ViewHolder vh;


    if (viewType == VIEW_ITEM) {


        View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.raw_eventlist, parent, false);

        itemView.setOnClickListener(EventFragment.myOnClickListener);

        vh = new TextViewHolder(itemView);

    } else {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.progressbar_item, parent, false);
        vh = new ProgressViewHolder(v);
    }
    return vh;
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    if (holder instanceof TextViewHolder) {

        Typeface AvenirNextRegular = Fonts.AvenirNextRegular(context);
        ((TextViewHolder) holder).txtEventName.setTypeface(AvenirNextRegular);
        ((TextViewHolder) holder).txtEventDescription.setTypeface(AvenirNextRegular);
        ((TextViewHolder) holder).txtDate.setTypeface(AvenirNextRegular);
        ((TextViewHolder) holder).txtTime.setTypeface(AvenirNextRegular);

        ((TextViewHolder) holder).txtEventName.setText(mDataset.get(position).getStrEventName());
        ((TextViewHolder) holder).txtEventDescription.setText(mDataset.get(position).getStrDescription());
        ((TextViewHolder) holder).txtDate.setText(mDataset.get(position).getStrStartDate());
        ((TextViewHolder) holder).txtTime.setText(mDataset.get(position).getStrStartTime());


        final RecyclerView.ViewHolder tempHolder = holder;
        String eventId = mDataset.get(position).getStrEventId();


            if (mDataset.get(position).getIsImageAvailable().equalsIgnoreCase("1"))
            {
                Glide.clear(((TextViewHolder) holder).imgProfile);
                Glide.with(context).load(WebField.EVENT_URL + eventId + "_small.png").asBitmap()
                        .placeholder(R.drawable.event_img).skipMemoryCache(true).
                        diskCacheStrategy(DiskCacheStrategy.ALL).fitCenter()
                        .into(new BitmapImageViewTarget(((TextViewHolder) holder).imgProfile) {
                            @Override
                            protected void setResource(Bitmap resource) {

                                Drawable d = new BitmapDrawable(context.getResources(), resource);
                                ((TextViewHolder) tempHolder).imgProfile.setImageDrawable(d);
                            }

                        });
            }
            else
            {
                ((TextViewHolder) holder).imgProfile.setImageResource(R.drawable.event_img);
            }
    }
}

public void setLoaded() {
    loading = false;
}

@Override
public int getItemCount() {
    return mDataset.size();
}

public void setOnLoadMoreListener(OnLoadMoreListener onLoadMoreListener) {
    this.onLoadMoreListener = onLoadMoreListener;
}

public interface OnLoadMoreListener {
    void onLoadMore();
}

public static class TextViewHolder extends RecyclerView.ViewHolder {

    CircularImageView imgProfile;
    TextView txtEventName;
    TextView txtEventDescription;
    TextView txtDate;
    TextView txtTime;
    ImageView btnNext;

    public TextViewHolder(View view) {
        super(view);
        this.imgProfile = (CircularImageView) view.findViewById(R.id.imgProfile);
        this.txtEventName = (TextView) view.findViewById(R.id.txtEventName);
        this.txtEventDescription = (TextView) view.findViewById(R.id.txtEventDescription);
        this.txtDate = (TextView) view.findViewById(R.id.txtDate);
        this.txtTime = (TextView) view.findViewById(R.id.txtTime);
        this.btnNext = (ImageView) view.findViewById(R.id.btnNext);
    }
}

public static class ProgressViewHolder extends RecyclerView.ViewHolder {
    public ProgressBar progressBar;

    public ProgressViewHolder(View v) {
        super(v);
        progressBar = (ProgressBar) v.findViewById(R.id.progressBar);
        progressBar.getIndeterminateDrawable().setColorFilter(Color.BLUE, PorterDuff.Mode.MULTIPLY);
    }
}

确实已创建private void IconsListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (VoteListBoxItem.IsSelected) ViewFrame.Navigate(typeof(VotePage)); else if (AppDetailsListBoxItem.IsSelected) ViewFrame.Navigate(typeof(AppDetailsPage)); } ,您无需通过对主页框架的引用来覆盖它。