wpf 如何在tabContrl页中显示一个xaml页

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wpf 如何在tabContrl页中显示一个xaml页相关的知识,希望对你有一定的参考价值。

如题,wpf 如何在tabContrl页中显示一个xaml页

首先你要显示的xaml页面必须为UserControl,假设名称为UserControl1,你的tabControl中有一个tabItem1, this.tabItem1.Content= new UserControl1(); 就可以显示了 参考技术A <TabControl>
<TabItem>
<TabItem.Header>
学生信息
</TabItem.Header>
<ContentControl Margin="10" Content="Binding Path=StudentInfo" />
</TabItem>
</TabControl>

后台:Public StudentInfoViewMode StudentInfoget;private set;
你看看,能理解不能。我的程序上面比较多,只能拉出来给你看一点。希望对你有帮助。本回答被提问者和网友采纳

如何在不滚动的情况下将 flex 容器全部保存在一页中

【中文标题】如何在不滚动的情况下将 flex 容器全部保存在一页中【英文标题】:How to keep a flex container all in one page without scroll 【发布时间】:2019-09-23 10:46:18 【问题描述】:

我正在创建一个网页,它需要在一个页面中显示一些电影封面,而不是滚动它,因为它将显示。问题是我想让内容调整大小而不是使网页可滚动。我还需要支持 n 部电影(它们是依赖的)。我已经尝试过两次使用 flexbox,但它不起作用。另外,我正在使用tailwindcss框架,但我认为这不是问题,因为它只是类形式的css......

<html class='h-full m-0 p-0'>
<head>
  <link href="https://unpkg.com/tailwindcss@next/dist/tailwind.min.css" rel="stylesheet">
</head>
<body class='h-full m-0 p-0'>
  <div class='mx-10 mt-10 flex content-center items-center'>
    <div class='flex flex-wrap'>
<!-- iterate over every movie -->
      <div class='m-2 relative flex-grow h-full' style='flex-basis: 20%'>
        <span class='px-2 py-1 rounded-full bg-blue-500 text-white absolute z-0' style='top: -0.5rem; right: -0.5rem'>0</span>
         <img src='https://images.unsplash.com/photo-1525604803468-3064e402d70c' class: 'w-full' />
         <span class='w-full opacity-75 bg-black text-white py-1 absolute z-0 inset-x-0 bottom-0 text-center px-2'>title</span>
      </div>
<!-- end -->
    </div>
  </div>
</body>
</html>

编辑:我添加了一个完整的示例(带有来自 unsplash 的示例图像)我希望它看起来像什么。

【问题讨论】:

那么,您希望封面缩小或扩大以填满屏幕,但永远不要大于屏幕,这样您就不必垂直或水平滚动?你知道封面和屏幕的比例吗?它们总是一样的吗? 不,它们可能会有所不同,但我认为它们大多是 16:9 的屏幕和 27″ x 40″ 的海报。但我很伤心,他们可能会有所不同 【参考方案1】:

我认为没有 JavaScript 就无法完成您所要求的工作。在下面的示例中,我使用 CSS 来保持封面的比例,并使用 JavaScript 来计算阻止内容垂直滚动的最大宽度。

Here is a fiddle.

function getRandomColor() 
  var letters = '0123456789ABCDEF';
  var color = '#';
  for (var i = 0; i < 6; i++) 
    color += letters[Math.floor(Math.random() * 16)];
  
  return color;


let numCovers = 10;
let coverList = document.querySelector(".cover-list");

// this function determines what percentage of the cover-list's width
// each cover should take up. It will maximize how large they can be
// without making the total grid size larger than cover-list.
// This should prevent scrolling.
function getBasis() 
  let ratio = 1.35; // height/width
  let width = coverList.clientWidth;
  let height = coverList.clientHeight;
  
  // this loop is really slow, you may want to find a faster way
  let col = 0;
  let accWidth, accHeight, numRows;
  do 
  	col++;
    if (col > numCovers) 
    	// maximize height
      return (height / ratio) + "px";
    
  	accWidth = width / col;
    accHeight = accWidth * ratio;
    numRows = Math.ceil(numCovers / col);
   while (accHeight * numRows > height);
  
  return (100 / col) + "%";


function generateCovers() 
	// clear existing covers
  coverList.innerHTML = "";
  let basis = getBasis();
  for (let i = 0; i < numCovers; i++) 
    let cover = document.createElement("div");
    cover.classList.add("cover");
    cover.style.flexBasis = basis;
    let inner = document.createElement("div");
    inner.classList.add("inner");
    inner.style.backgroundColor = getRandomColor();
    cover.append(inner);
    coverList.append(cover);
  


let numCoversInput = document.querySelector("#num-covers");
numCoversInput.addEventListener("change", function() 
	numCovers = Math.min(Math.max(this.value, 1), 500);
  this.value = numCovers;
  generateCovers();
);
generateCovers();

window.addEventListener("resize", function() 
  let basis = getBasis();
  coverList.querySelectorAll(".cover").forEach(function(el) 
  	el.style.flexBasis = basis;
  );
);
body 
  /* set margin to computable value for cover-list calcs */
  margin: 5px;


#controls 
  height: 25px;


.cover-list 
  /* account for margin and controls with calc */
  width: calc(100vw - 10px);
  height: calc(100vh - 35px);
  
  /* use flex so the content will wrap as desired */
  display: flex;
  flex-wrap: wrap;
  align-content: start;


.inner 
  /* padding percentages are based on width, so setting
     the height to 0 and padding-bottom to a percentage
     allows us to maintain a ratio */
  width: 100%;
  height: 0;
  padding-bottom: 135%;
<div id="controls">
  <label>
    Number of covers: <input id="num-covers" type="number" value="10" min="1" max="500"/>
  </label>
</div>
<div class="cover-list">
</div>

【讨论】:

这真是太棒了,非常感谢!但我不能让它与封面 div 中的其他元素一起使用(比如两个跨度和 img)。你有什么建议吗? (也许只是我……) 另外,似乎通过在封面上添加一点边距或填充它会破坏...... 您只需要在.cover 元素中添加您的元素。我不知道您如何设置两个 span 和 img 的样式,但您要确保它们位于封面内。如果它们扩展得比它大,那么它将破坏在 JavaScript 中进行的计算。最简单的做法是使内容适合其父级,或者只是在封面上设置overflow:hidden。要添加填充,您需要将其添加到封面的子项中,或者在封面上设置box-sizing:border-box

以上是关于wpf 如何在tabContrl页中显示一个xaml页的主要内容,如果未能解决你的问题,请参考以下文章

winform 怎么实现像webform的母版页的效果

WPF中DataGrid显示图片,绑定图片路径显示

WPF中DataGrid显示图片,绑定图片路径显示

WPF DataGrid 列宽自动和滚动条

如何在 CBV 的 django 分页中显示页面项目数?

如何在 Sharepoint 2010 Web 部件页中正确更新站点图标